String split方法使用regex将第一个元素返回为空

时间:2016-01-10 15:38:29

标签: java regex split

我正在尝试使用Java的[1..1]方法从表达式split中获取数字。我正在^\\[|\\.{2}|\\]$内使用正则表达式split。但split方法返回String数组,第一个值为空,然后分别在索引1和2中为“1”。任何人都可以告诉我我在这个正则表达式中做了什么错误,所以我只从split方法得到返回的String数组中的数字?

4 个答案:

答案 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_fromrange_to您无法使用的整数。

优势在于模式将在..3[4等没有多大意义的字符串上失败。