Java split返回结果中的空格

时间:2017-02-06 15:42:01

标签: java regex split

我正在使用" split"在这个字符串上:

p(80,2)

我想获得这两个数字,所以这就是我所做的:

String[] split = msg.msgContent().split("[p(,)]")

正则表达式是正确的(或至少,我认为是这样)因为它将两个数字分开并将它们放在向量" split"中,但事实证明这个向量的长度为4,前两个位置被白色空间占据 实际上,如果我打印每个向量位置,结果就是:

Split:


80
2 

我尝试将\\ s添加到正则表达式以匹配空格,但由于我的字符串中没有,所以它不起作用。

4 个答案:

答案 0 :(得分:3)

您在这里不需要split,只需使用简单的正则表达式从字符串中提取数字:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(msg.msgContent());
while (m.find()) {
     String number = m.group();
     // add to array
}

请注意,String#split采用正则表达式,而您传递的正则表达式与您正在寻找的模式不匹配。

您可能需要阅读documentationPatternMatcher,了解有关上述解决方案的更多信息。

答案 1 :(得分:2)

split接受正则表达式作为参数,这是一个字符类:[p(,)]

鉴于您的代码正在拆分类中的所有字符:

"p(80,2)"将返回数组{"", "80", "2"}

我知道不是很漂亮:

List<String> collect = Pattern.compile("[^\\d]+")
                              .splitAsStream(s)
                              .filter(s -> s.length() > 0)
                              .collect(Collectors.toList());

答案 2 :(得分:1)

由于您要分割p(,因此字符串的前两个字符会导致分割。在替换p()后,我会在逗号上拆分。像这样:

String x = "p(80,2)";
String [] y = x.replaceAll("[p()]", "").split(",");

答案 3 :(得分:0)

拆分它并不是你真正需要的东西,但如果你想使用它,你可以做类似的事情:

"p(80,2)".replace("p(", "").replace(")", "").split(",")

结果

  

[80,2]