Java split 在结果中返回空格



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

p(80,2)

我只想获得这两个数字,所以我这样做:

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

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

Split:

80
2 

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

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

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

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

您可能需要阅读 PatternMatcher 的文档,了解有关上述解决方案的详细信息。

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

假设您的代码在类中的所有字符上拆分:

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

我知道不是很漂亮:

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

由于您在 p( 上拆分,字符串的前两个字符会导致拆分。替换p()后,我会在逗号上拆分。喜欢这个:

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

拆分 这不是你在这里真正需要的,但如果你想使用它,你可以做这样的事情:

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

结果与

[80,2]

最新更新