我正在使用" split"在这个字符串上:
p(80,2)
我想获得这两个数字,所以这就是我所做的:
String[] split = msg.msgContent().split("[p(,)]")
正则表达式是正确的(或至少,我认为是这样)因为它将两个数字分开并将它们放在向量" split"中,但事实证明这个向量的长度为4,前两个位置被白色空间占据 实际上,如果我打印每个向量位置,结果就是:
Split:
80
2
我尝试将\\ s添加到正则表达式以匹配空格,但由于我的字符串中没有,所以它不起作用。
答案 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
采用正则表达式,而您传递的正则表达式与您正在寻找的模式不匹配。
您可能需要阅读documentation和Pattern
的Matcher
,了解有关上述解决方案的更多信息。
答案 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]