java - 如何扩展范围\w\d+-\w\d+

标签 java

我有一些字符串类型数据,例如“U39,R11,U50-U55,U99”。

如何通过扩展连字符范围将其更改为“U39,R11,U50,U51,U52,U53,U54,U55,U99”?

我尝试使用Java正则表达式来抓取“-”之前和“-”之后的数字和字母前缀,然后使用循环从头到尾打印数字。有更好的解决办法吗?

最佳答案

我认为一个明智的方法是像这样进行:

  1. 使用 labelsIn 将字符串拆分为字符串数组(称为 String.split(",") )。 .
  2. 创建 ArrayList<String> (称之为 labelsOut )来保存您的结果。
  3. 循环 labelsIn数组和每个元素:
    • 如果是matches the pattern [A-Z][0-9]+ ,将其附加到labelsOut列表。
    • 否则,如果它与模式 ([A-Z])([0-9]+)-\1([0-9]+) 匹配(调用 Matcher 对象 match ),提取数字 lowhigh (使用 Integer.valueOf(match.group(2))Integer.valueOf(match.group(3)) )以及所有数字 n来自lowhigh ,添加 String.format("%s%d", match.group(1), n) labelsOut列表。
    • 否则就是语法错误。
  4. Concatenate the strings来自labelsOut列表带有 "," .

您可以通过在 \s* 周围允许零个或多个空白字符 ( "," ) 来稍微概括正则表达式。和"-"如果您认为合适。

请注意,上述过程是为了教学清晰度而不是性能而优化的。如果需要,您可以删除一些中间结果。您也可以考虑使用 Java 8 streams “简化”代码。

关于java - 如何扩展范围\w\d+-\w\d+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292563/

相关文章:

java - Log4j 2 JSON 配置

java - 如何动态更改 weblogic.xml 中的值?

java - 在 Java 1.6 中,如何通过 HTTPHandler 在内存中提供 JPEG 服务?

java - 如何使用 hibernate 检索表的所有主键?

java - 在 C# 中是否有与空合并运算符 (??) 等效的 Java?

java - 双屏应用

java - 将数据插入sqlite java表

java - Log4j 附加器大小

java - 阐明http错误404

java - Hibernate - 通过用户名关系加密引用