2014-05-15 70 views
1

我想使用模式和匹配器來確定給定的字符串是否有2位數之間的空格。例如「5 1」應該返回爲真,「51」應該返回爲假。起初,我正在使用string.replaceAll與正則表達式,它運作良好,但移動到模式我似乎無法讓它的工作。使用模式和匹配器查找數字

String findDigit = "5  1/3"; 
    String regex = "(\\d) +(\\d)"; 
    findDigit = findDigit.replaceAll(regex, "$1 $2"); 

    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(findDigit); 
    System.out.println(m.matches()); 
    System.out.println(m.hitEnd()); 

我第一次開始這個。 replaceAll可以毫無困難地工作並刪除多餘的空格,但m.matches和m.hitEnd都返回false。後來我想我可能會做錯事,所以我簡單的情況下,只是

String findDigit = "5"; 
    String regex = "\\d"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(findDigit); 
    System.out.println(m.matches()); 
    System.out.println(m.hitEnd()); 

和匹配回來真(明顯),但是當我把它改成這樣

String findDigit = "5 3"; 
    String regex = "\\d"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(findDigit); 
    System.out.println(m.matches()); 
    System.out.println(m.hitEnd()); 

回來都假的。所以我想我的主要問題是如何確定在我的字符串中有任何數字,然後更具體地說,我該如何確定字符串中是否有數字空格。我以爲那是命中註定,但我想我錯了。提前致謝。

+0

爲什麼-1這麼快,沒有解釋,爲什麼呢? – jhnewkirk

+0

好吧,謝謝誰投票支持我,現在我意識到我正在愚蠢...... m.find()。 *在桌子上打頭* – jhnewkirk

回答

0

答案當然是m.find()抱歉今天早上很愚蠢。感謝所有甚至看過這個:)

2

如果你正在尋找一個匹配多個空格,但想保留輸出的格式,你可以使用組和反引用。

例如:

String input = "blah 5    6/7"; 
Pattern p = Pattern.compile("(\\d)\\s+(\\d)"); 
Matcher m = p.matcher(input); 
while (m.find()) { 
    System.out.printf("Whole match: %s\n\tFirst digit: %s\n\tSecond digit: %s\n", m.group(), m.group(1), m.group(2)); 
} 

輸出

Whole match: 5    6 
    First digit: 5 
    Second digit: 6 
+0

這實際上極大地幫助我回答了另一個問題,我非常感謝你! – jhnewkirk

+0

@jhnewkirk不客氣! – Mena