2016-03-02 76 views
0

我需要幫助。我正在開始編程,我嘗試用正則表達式來編寫程序。 我嘗試在我的文件中找到每個生活單詞。我有這樣的代碼:如何在Java文件中找到簡單的單詞?

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class myClass { 

    public int howManyWord() { 
     int count = 0;  
     try { 
      BufferedReader br = new BufferedReader(new FileReader("C:/myFile.txt")); 
      String line = ""; 
      while ((line = br.readLine()) != null) { 
       Matcher m = Pattern.compile("life").matcher(line); 
       while (m.find()) { 
        System.out.println("found"); 
        count++; 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return count;  
    } 
}  

這是行得通的。我試圖改變這一點,因爲當我搜索我的單詞時,編輯器發現像這樣的「生命」計數是2. 我應該改變什麼?

對不起,我的英文,但請幫助我。

+2

嘗試改變 「生活」 到 「\\ \\ blife B」 –

回答

0

"(?<=^|\\W)life(?=$|\\W)"會找到單詞「生命」而不是「生命」或「xlife」。

+0

感謝的人!那就是答案。你能告訴我如何在評論中忽略**生命**嗎?像:'// life'和'/ * life * /'。 TY :) – Anthony

+0

@安仁好,忽略行評論可以用「看後面」來完成。阻止評論更糟... – pkalinow

1

使用Pattern p = Pattern.compile("\\blife\\b");並在while循環之前設置一次模式。

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class myClass { 

public int howManyWord() { 
    int count = 0;  
    try { 
     BufferedReader br = new BufferedReader(new FileReader("C:/myFile.txt")); 
     String line = ""; 
     Pattern p = Pattern.compile("\\blife\\b"); // compile pattern only once 
     while ((line = br.readLine()) != null) { 
      Matcher m = p.matcher(line); 
      while (m.find()) { 
       System.out.println("found"); 
       count++; 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return count;  
} 
} 
+0

謝謝。你能告訴我應該如何改變這個代碼來忽略** life **嗎? – Anthony

相關問題