我正在读取文件中的文字,并试图计算Lady,Lucy和Lazy这些词的出现次数。我期待3的数量,但得到0.请帮我找到这里的错误。
FileReader r= new FileReader("C:\\Users\\beath.txt");
BufferedReader bfr=new BufferedReader(r);
String x="L[a-z]{2}y";
String Y="";
while ((Y=bfr.readLine())!=null)
{
String[] words = Y.split(" ");
Pattern p = Pattern.compile(x);
for (String word : words)
m = p.matcher(word);
if(m.find())
count++;
}
答案 0 :(得分:1)
您只匹配每行的最后一个字。这里的代码格式正确:
while ((Y=bfr.readLine())!=null)
{
String[] words = Y.split(" ");
Pattern p = Pattern.compile(x);
for (String word : words)
m = p.matcher(word);
// this only happens after the for loop!!
if(m.find())
count++;
}
要修复,只需使用花括号将if
包含在循环体中:
while ((Y=bfr.readLine())!=null)
{
String[] words = Y.split(" ");
Pattern p = Pattern.compile(x);
for (String word : words) {
m = p.matcher(word);
if(m.find())
count++;
}
}
答案 1 :(得分:0)
一个问题是你的for()循环只适用于“m = p.matcher(word);”因为你没有其他任何东西。所以“if(m.find())计数++;”代码每行只执行一次,而不是每个单词执行一次。因此,只有Lady例如是该行中的最后一个单词才会匹配。
您可能打算这样做:
for (String word : words) {
m = p.matcher(word);
if(m.find())
count++;
}