Fehler während der Benutzung StringTokenizer auf text-Datei mit mehreren Zeilen
Ich versuche, um eine Textdatei zu Lesen und teilen Sie die Wörter einzeln mit string-tokenizer-Dienstprogramm in java.
Die text-Datei sieht wie folgt aus;
a 2000
4
b 3000
c 4000
d 5000
Nun, was ich versuche zu tun ist, Holen Sie sich jedes einzelne Zeichen aus der text-Datei und speichern Sie es in eine array-Liste. Ich versuche dann, und drucken Sie jedes element in der arraylist in das Ende.
Hier ist mein code;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
public static void main(String[] args) {
String fileSpecified = args[0];
fileSpecified = fileSpecified.concat(".txt");
String line;
System.out.println ("file Specified = " + fileSpecified);
ArrayList <String> words = new ArrayList<String> ();
try {
FileReader fr = new FileReader (fileSpecified);
BufferedReader br = new BufferedReader (fr);
line = br.readLine();
StringTokenizer token;
while ((line = br.readLine()) != null) {
token = new StringTokenizer (line);
words.add(token.nextToken());
}
} catch (IOException e) {
System.out.println (e.getMessage());
}
for (int i = 0; i < words.size(); i++) {
System.out.println ("words = " + words.get(i));
}
}
Die Fehlermeldung die ich bekommen, ist dies;
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken<Unknown Source>
at getWords.main<getWords.java:32>
Wo 'getWords' ist der name meiner java-Datei.
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
a) Sie haben immer zu prüfen,
StringTokenizer.hasMoreTokens()
ersten. WerfenNoSuchElementException
ist das dokumentierte Verhalten, wenn keine weitere Token verfügbar sind:b) don ' T create a new Tokenizer für jede Zeile, es sei denn, die Datei ist zu groß, um passen in den Speicher. Lesen Sie die gesamte Datei in einen String und lass den tokenizer Arbeit auf, dass
Ihrem Allgemeinen Ansatz scheint solide, aber Sie haben ein Grundsätzliches problem in deinem code.
Ihre parser ist in den meisten Fällen defekt auf der zweiten Zeile der input-Datei. Diese Zeile ist eine leere Zeile, also, wenn Sie rufen
words.add(token.nextToken());
erhalten Sie eine Fehlermeldung, da gibt es kein Token. Dies bedeutet auch, Sie werden immer nur das erste token jeder Zeile.Sollten Sie iterativ auf die tokes wie diese:
Finden Sie ein mehr Allgemeines Beispiel in den javadocs hier:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html
Dieses problem wird durch die Tatsache, dass Sie nicht testen, ob es eine nächste token, bevor Sie versuchen, das nächste token. Sie sollten immer prüfen, ob
hasMoreTokens()
vor gibttrue
vor dem AufrufnextToken()
.Aber Sie haben andere bugs :
Müssen Sie die Verwendung von hasMoreTokens () - Methode. Auch die an verschiedenen coding-standard Probleme in Ihrem code wie bereits von JB Nizet