Java Regexp“\\ d +”(仅限数字)不起作用

时间:2016-08-24 14:57:28

标签: java regex

输入字符串: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);     

2 个答案:

答案 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() );