繁体   English   中英

Java split在结果中返回空格

[英]Java split returns white spaces in result

我在此字符串上使用函数“ 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM