2016-03-02 81 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

相关问题