2016-11-15 2 views
0

Ich versuche nach Wörtern in einer Textdatei zu suchen und alle Großbuchstaben durch Kleinbuchstaben zu ersetzen. Das Problem ist, dass ich einen Syntaxfehler bekomme, wenn ich die Funktion "Alle ersetzen" mit einem regulären Ausdruck verwende. Ich habe verschiedene Taktiken ausprobiert, aber es funktioniert nicht. Irgendwelche Tipps? Ich denke, dass ich vielleicht eine Replace All-Methode erstellen sollte, die ich aufrufen müsste, aber ich sehe ihre Verwendung nicht wirklich.Suche nach Wörtern in einer Textdatei in Java

public static void main() throws FileNotFoundException { 

    ArrayList<String> inputContents = new ArrayList<>(); 

    Scanner inFile = 
    new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

    while(inFile.hasNextLine()) 
    { 
     String line = inFile.nextLine(); 
     inputContents.add(inFile.nextLine()); 

    } 
    inFile.close(); 

    ArrayList<String> dictionary = new ArrayList<>(); 


    for(int i= 0; i <inputContents.size(); i++) 
    { 
     String newLine = inFile.nextLine(); 
     newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 
     dictionary.add(inFile.nextLine()); 

    } 


    // PrintWriter outFile = 
    // new PrintWriter("H:\\csc8001\\results.txt"); 

} 
+0

Bitte formatieren Sie Ihren Code richtig. –

+0

Bitte schauen Sie sich die replaceAll-Methode des Strings an: https://www.tutorialspoint.com/java/java_string_replaceall.htm – RamanSB

Antwort

3

Es ist ein Übersetzungsfehler auf dieser Linie:

newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 

Da replaceAll dauert 2 Parameter: einen regulären Ausdruck und einen Ersatz. (. Und weil newLine(i) ist non-sense) Dies sollte näher sein, was Sie brauchen:

newLine = newLine.replaceAll("[^A-Za-z0-9]+", " "); 

Das heißt, ersetzen nicht leere Sequenzen von nicht [A-Za-z0-9] Zeichen mit einem Leerzeichen.

Um alle Großbuchstaben in Kleinbuchstaben umzuwandeln, ist es einfacher und besser, toLowerCase zu verwenden.

Es gibt viele andere Probleme in Ihrem Code auch. Zum Beispiel werden einige Zeilen in der Eingabe wegen einiger unpassender inFile.nextLine Anrufe übersprungen. Außerdem wird die Eingabedatei nach der ersten Schleife geschlossen, aber die zweite versucht, sie zu verwenden, was keinen Sinn macht.

Mit diesen und ein paar andere Probleme bereinigt, sollten diese näher an, was Sie wollen:

Scanner inFile = new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

List<String> inputContents = new ArrayList<>(); 
while (inFile.hasNextLine()) { 
    inputContents.add(inFile.nextLine()); 
} 
inFile.close(); 

List<String> dictionary = new ArrayList<>(); 
for (String line : inputContents) { 
    dictionary.add(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase()); 
} 

Wenn Sie Wörter in das Wörterbuch statt Zeilen hinzufügen möchten, müssen Sie auch die Linien aufgespalten auf Leerzeichen. Eine einfache Möglichkeit, das zu erreichen:

dictionary.addAll(Arrays.asList(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase().split(" "))); 
+0

also ist es Ihrer Meinung nach besser, eine andere Methode zu erstellen, deren Funktionsnutzen in der Hauptmethode verwendet werden soll die angeforderte Aufgabe, ob esAlle oder toLowerCase ersetzen? – Jazztheman

+0

Ich war Sightseeing, um einfach 'replaceAll' durch' toLowerCase' zu ​​ersetzen. Ich fügte mehr Erklärung hinzu, falls es hilft, sehen Sie mein Update – janos

+0

Vielen Dank für Ihre Hilfe. Ich habe nur eine letzte Frage, wie hast du es geschafft, alle Nicht-Wörter aus der inputContents-Liste zu entfernen? Wie kann man sicherstellen, dass es keine Ausrufezeichen und andere Zeichen gibt? – Jazztheman

Verwandte Themen