我有一些字符串类型数据,例如“U39,R11,U50-U55,U99
”。
如何通过扩展连字符范围将其更改为“U39,R11,U50,U51,U52,U53,U54,U55,U99
”?
我尝试使用Java正则表达式来抓取“-”之前和“-”之后的数字和字母前缀,然后使用循环从头到尾打印数字。有更好的解决办法吗?
最佳答案
我认为一个明智的方法是像这样进行:
- 使用
labelsIn
将字符串拆分为字符串数组(称为String.split(",")
)。 . - 创建
ArrayList<String>
(称之为labelsOut
)来保存您的结果。 - 循环
labelsIn
数组和每个元素:- 如果是matches the pattern
[A-Z][0-9]+
,将其附加到labelsOut
列表。 - 否则,如果它与模式
([A-Z])([0-9]+)-\1([0-9]+)
匹配(调用Matcher
对象match
),提取数字low
和high
(使用Integer.valueOf(match.group(2))
和Integer.valueOf(match.group(3))
)以及所有数字n
来自low
至high
,添加String.format("%s%d", match.group(1), n)
到labelsOut
列表。 - 否则就是语法错误。
- 如果是matches the pattern
- Concatenate the strings来自
labelsOut
列表带有","
.
您可以通过在 \s*
周围允许零个或多个空白字符 ( ","
) 来稍微概括正则表达式。和"-"
如果您认为合适。
请注意,上述过程是为了教学清晰度而不是性能而优化的。如果需要,您可以删除一些中间结果。您也可以考虑使用 Java 8 streams “简化”代码。
关于java - 如何扩展范围\w\d+-\w\d+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292563/