如何在Java文件中找到简单的单词?

时间:2016-03-02 15:22:31

标签: java regex

我需要帮助。我正在开始编程,我尝试用正则表达式编写程序。 我尝试在文件中找到每个生活字样。我有这样的代码:

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 个答案:

答案 0 :(得分: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;       
}
}  

答案 1 :(得分:0)

"(?<=^|\\W)life(?=$|\\W)"会找到单词&#34; life&#34;但不是&#34;生命生活&#34;或&#34; xlife&#34;。