2016-11-30 4 views
0

Ich lese einen Text aus einer Datei und versuchen, Anzahl der Vorkommen der Wörter Lady, Lucy und Lazy zu zählen. Ich erwarte eine Zählung von 3, bekomme aber 0. Bitte hilf mir herauszufinden, was hier falsch ist.Count Anzahl der Vorkommen eines Musters in einer Textdatei mit Regex in Java

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

Antwort

0

Ein Problem ist, dass Ihre für() Schleife gilt nur für der "m = p.matcher (Wort);" Linie, da Sie um nichts sonst Klammern haben. Also "if (m.find()) count ++;" Code wird nur einmal pro Zeile ausgeführt, nicht einmal pro Wort. So wird es nur passen, wenn Lady zum Beispiel das letzte Wort in der Zeile ist.

Sie wahrscheinlich gemeint, dies zu tun:

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

Sie passen nur das letzte Wort in jeder Zeile an. Hier Ihr Code ist richtig formatierte:

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

zu beheben, schließen Sie einfach die if im Körper der Schleife unter Verwendung von geschweiften Klammern:

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

Ja, es worked..some, wie ich es übersehen. – Aish

Verwandte Themen