使用Java中的正则表达式计算文本文件中模式的出现次数

时间:2016-11-30 03:33:12

标签: java regex

我正在读取文件中的文字,并试图计算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++;
     }

2 个答案:

答案 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++;
}