我正在尝试使用Java的[1..1]
方法从表达式split
中获取数字。我正在^\\[|\\.{2}|\\]$
内使用正则表达式split
。但split
方法返回String数组,第一个值为空,然后分别在索引1和2中为“1”。任何人都可以告诉我我在这个正则表达式中做了什么错误,所以我只从split
方法得到返回的String数组中的数字?
答案 0 :(得分:1)
你应该使用匹配。将表达式更改为:
`^\[(.*?)\.\.(.*)\]$`
从两个被捕获的小组中获取结果。
至于为什么split
以这种方式行事,这很简单:你要求它拆分[
字符,但仍然是&#34 ;字符串开头和第一个[
字符之间的空字符串" 。
答案 1 :(得分:0)
您的正则表达式与[
和..
以及]
匹配。因此它会在这种情况下分裂。
您不应使用拆分,而是使用正则表达式匹配字符串中的每个数字。
答案 2 :(得分:0)
您已将其设置为[
,]
和..
是分隔符。 Split
将返回一个空的第一个索引,因为字符串[1..1]
中的第一个字符是分隔符。我会根据建议here来删除字符串前面和末尾的分隔符。
所以,像
input.replaceFirst("^[", "").split("^\\[|\\.{2}|\\]$");
或者,更直接地使用正则表达式和正则表达式组(例如此问题中的其他答案),而不是通过拆分。
答案 3 :(得分:0)
为什么不使用正则表达式捕获数字?这将更有效,更不容易出错。在这种情况下,正则表达式看起来像:
^\[(\d+)\.{2}(\d+)\]$
你可以用以下方式捕捉它们:
Pattern pat = Pattern.compile("^\\[(\\d+)\\.{2}(\\d+)\\]$");
Matcher matcher = pattern.matcher(text);
if(matcher.find()) { //we've found a match
int range_from = Integer.parseInt(matcher.group(1));
int range_to = Integer.parseInt(matcher.group(2));
}
使用range_from
和range_to
您无法使用的整数。
优势在于模式将在..3[4
等没有多大意义的字符串上失败。