我需要帮助。我正在开始编程,我尝试用正则表达式编写程序。 我尝试在文件中找到每个生活字样。我有这样的代码:
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。 我应该改变什么?
对不起我的英语,请帮帮我。
答案 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;。