输入字符串:07-000
JAVA Regexp:\\d+
(仅限数字)
预期结果:07000
(仅来自输入字符串的数字)
那么为什么这个Java代码只返回07
?
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("07-000");
String result = null;
if (matcher.find()) {
result = matcher.group();
}
System.out.println(result);
答案 0 :(得分:2)
我想你想要实现的是这个:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("07-000");
StringBuilder result = new StringBuilder();
// Iterate over all the matches
while (matcher.find()) {
// Append the new match to the current result
result.append(matcher.group());
}
System.out.println(result);
<强>输出:强>
07000
确实matcher.find()
将返回输入中与模式匹配的下一个子序列,因此如果您只调用一次,那么您将只获得第一个子序列07
。因此,如果您希望获得循环所需的所有内容,直到它返回false
,表示没有更多匹配可用。
但是在这种情况下,最好直接调用myString.replaceAll("\\D+", "")
,它将替换为空的String
任何非数字字符。
答案 1 :(得分:1)
那为什么这个Java代码只返回07?
它只返回07
,因为这是你的正则表达式找到的第一个组,你需要一个while循环来获取所有组,然后你可以连接它们以获得一个字符串中的所有数字。
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("07-000");
StringBuilder sb = new StringBuilder();
while (matcher.find())
{
sb.append( matcher.group() );
}
System.out.println( "All the numbers are : " + sb.toString() );