2016-08-24 57 views
-1

輸入字符串:07-000Java的正則表達式 「\ d +」(僅限阿拉伯數字)不工作

JAVA正則表達式:\\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

爲什麼matcher.find只匹配數字的「一個」「集合」?那個文件在哪裏?什麼是「集合」? –

+1

此文檔位於:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#find()。 'find'停在與模式匹配的最後一個字符處。 – Riaz

+0

謝謝你Riaz和svasa,明白了。 –

回答

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()); 
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代替任何非數字字符。

相關問題