2013-07-30 98 views
1

我有下面的代碼片斷這不只是打印出「確實」,而不是整個事情:詢問級掃描儀的方法

Pattern pat = Pattern.compile("\\w+");  
    s = new Scanner("Indeed it's going to be the thing i am talking about"); 
    while(s.hasNext(pat)){ 

     System.out.println(s.next(pat)); 

我徹底知道有其他的方法來獲得所期望的輸出等等。 但是我想知道這個特殊情況,爲什麼它不起作用。

在此先感謝。

+1

我想你應該把s.hasNext(pat)中的模式作爲參數傳遞。 – arjacsoh

+0

編輯:但我只出去「確實」,而不是所有的令牌。 – Rollerball

+0

@滾球查看我的回答。 –

回答

2

Pattern\\w+,它匹配:[a-zA-Z_0-9],所以:

while(s.hasNext(pat)) 

經過一次,因爲它匹配:Indeed

它確實因爲'的比賽it's,所以循環終止,並只得到Indeed。如果您刪除'它將按計劃運行。

要解決你的代碼,你可以做到以下幾點:

Pattern pat = Pattern.compile("[a-zA-Z_0-9']+"); 

如果這不是明顯的,我只是增加了一個'Pattern

1

Scanner.hasNext(String pattern)如果下一個標記與模式匹配,則返回true。在你的情況下,第一個標記是「確實」,它不符合模式「。」。

+0

看看我的編輯。爲什麼我只能得到「確實」? – Rollerball

0

你實際上需要的方法findInLine。修改代碼爲:

Pattern pat = Pattern.compile("\\w+");  
Scanner s = new Scanner("Indeed it's going to be the thing i am talking about"); 
s.findInLine(pat); 
while(s.hasNext()) 
     System.out.println(s.next());