我在这个字符串上使用函数"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
采用正则表达式,并且您传递的正则表达式与您正在寻找的模式不匹配。
您可能需要阅读 Pattern
和 Matcher
的文档,了解有关上述解决方案的详细信息。
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]