2016-11-30 3 views
0

ファイルからテキストを読み取り、Lady、Lucy、Lazyという単語の出現回数をカウントしようとしています。私は3のカウントを期待していますが、0を取得しています。ここで何が間違っているかを見つけるのを手伝ってください。Javaでregexを使用してテキストファイル内のパターンが発生した回数をカウントします。

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

一つの問題は、あなたのために()ループのみに適用されることである:

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を含めます"m = p.matcher(単語);"あなたが何かの周りに括弧を持っていないので、ライン。したがって、 "if(m.find())count ++;"コードは1行につき1回だけ実行され、1ワードにつき1回は実行されません。たとえば、Ladyがその行の最後の単語の場合にのみ一致します。

あなたはおそらくこれを行うためのもの:

for (String word : words) { 
    m = p.matcher(word); 
    if(m.find()) 
     count++; 
} 
1

あなたは各行の最後の単語に一致しています。ここでは、正しくフォーマットされたあなたのコードです:

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

は、はい、それは私がそれを見落としかworked..some。 – Aish

関連する問題