2012-07-06 49 views
0

我解析包含一些文本的文本文件匹配,如下圖所示:Scanner.hasNext字符串在Java中

Level1 
Some-text-here 
Level2 
Some-text-here 
Level3 
Some-text-here 

我已經實現了它分析文件,並試圖計數的出現次數的代碼文件中的「級別」。這是我正在做它:

Scanner scanner = new Scanner(new File(inPath)); 
Pattern p = Pattern.compile("Level"); 
while(scanner.hasNext()) { 
    if(scanner.hasNext(p)) { 
     ++lastLevelCreatedWas; 
    } 
    scanner.next(); 
} 

然而,「如果」條件從來沒有被擊中,因爲hasNext(P)正在試圖尋找「級別」的精確匹配,並會忽略這個詞「1級」, 「Level2」等。我該如何讓它考慮任何包含關鍵字「Level」的單詞?

回答

3

我認爲你正在尋找Scanner.useDelimiter

試試這個:

Scanner scanner = new Scanner(new File(inPath)); 
scanner.useDelimiter("Level"); 
while(scanner.hasNext()) { 
    ++lastLevelCreatedWas; 
    scanner.next(); 
} 

它而進入下一個「級別」的令牌,只要你想。

+0

是的,做到了。如果我想通過匹配一個字符串來完成該怎麼辦?我會使用像Patter.compile(「Level」,Pattern.COMMENTS)? – Rafay 2012-07-06 18:45:00

+1

如果你想要消費級別的數字,你想要使用'scanner.useDelimiter(「Level \\ d +」);',意思是'「Level」'後跟1-n數字 – Bohemian 2012-07-06 18:47:10

2

hasNext,getNext和其他類似的方法僅在分隔符被設置時才起作用。

調用useDelimiter將分隔符設置爲Scanner實例的方法。