2012-12-12 338 views
0

我正在嘗試查找字符串中的數字。我知道,在尋找一個數字是由\ d做,但是當我嘗試在一個示例文本類似如下:用我的Java代碼Java正則表達式在字符串中查找數字

127.0.0.1 - - [11/Dec/2012:11:57:36 -0500] "GET http:// localhost/ HTTP/1.1" 503 418 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11" 

Pattern test = Pattern.compile("\\d"); 
testLine = in.readLine(); // basically the text above 
// extract date and time log in and number of times a user has hit the page 
numTimesAccess++; // increment number of lines in a count 
System.out.println(test.matcher(testLine).group()); 
System.out.println(test.matcher(testLine).start()); 
System.out.println(test.matcher(testLine).end()); 

我得到一個錯誤的異常,說明找不到匹配項。我的正則表達式模式或我試圖訪問匹配模式的文本的方式有問題。

+0

謝謝我現在明白了,我很感謝大家的幫助 – jonathan1987

回答

5

首先,你應該叫Matcher.find()調用Matcher.group()

使用"\\d+"爲正則表達式之前,如果你認爲127作爲一個整體單一的數字。

 Pattern p = Pattern.compile("\\d+"); 
     Matcher m = p.matcher(s); 
     while(m.find()){ 
     System.out.println(m.group() + " " + m.start() + " " + m.end()); 
     } 
+0

我試過了,但仍然沒有。順便說一句,我在ubuntu linux上運行這個代碼,如果有的話。 – jonathan1987

+0

@ jonathan1987您可以發佈您嘗試過的代碼,並且還可以提及異常以及 – PermGenError

+0

。模式測試= Pattern.compile(「\\ d」); testLine = in.readLine(); //基本上上面的文字 System.out.println(test.matcher(testLine).group());並拋出異常:線程「main」中的異常java.lang.IllegalStateException:未找到匹配 \t at java.util.regex.Matcher.group(Matcher.java:468) \t at java.util.regex.Matcher。 group(Matcher.java:428) \t at logfilevarnish.ParseLogFile.main(ParseLogFile.java:23) – jonathan1987

0

如果你真的想找到個位數,你需要這樣的:

Pattern pattern = Pattern.compile("\\d"); 
Matcher matcher = pattern.matcher(testline); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

,如果你想找到非浮點數,改變正則表達式來"\\d+"

+0

我試過我想我拿出一看,然後只運行一次。第一次matcher.find()是真的,然後當我打印出來,我仍然得到一個異常拋出。 – jonathan1987

+0

如果你只想要第一場比賽,用'if'代替'while'' – jlordo

+1

你會得到異常,因爲你總是創建一個新的Matcher而不是隻使用一個。 – jlordo

相關問題