Ich möchte ein paar Wörter aus einer Datei lesen. Ich habe keine Methode gefunden, um dies zu tun, also habe ich beschlossen, char by char zu lesen , aber ich muss an den Leerzeichen anhalten, um das gelesene Wort in meinem Array zu speichern und zum nächsten zu wechseln.
Ich mache eine externe Sortieranwendung, deshalb habe ich eine Speicherbeschränkung, und in diesem Fall kann ich nicht einfach verwenden, readLine()
und dann split()
muss ich die Kontrolle darüber haben, was ich lese.
Die read()
Methode gibt ein int zurück und ich habe keine Ahnung, was ich tun kann, read()
um ein Zeichen zurückzugeben und das Lesen nach einem Leerzeichen zu beenden.
Dies ist mein Code bis jetzt:
protected static String [] readWords(String arqName, int amountOfWords) throws IOException {
FileReader arq = new FileReader(arqName);
BufferedReader lerArq = new BufferedReader(arq);
String[] words = new String[amountOfWords];
for (int i = 0; i < amountOfWords; i++){
//words[i] = lerArq.read();
}
return words;
}
Edit 1: Ich habe einen Scanner verwendet und die next()
Methode hat funktioniert. Die Initialisierung des Scanners erfolgt am Main.
static String [] readWords(int amountOfWords, Scanner leitor) throws IOException {
String[] words= new String[amountOfWords];
for (int i = 0; i < amountOfWords; i++){
words[i] = leitor.next();
}
return words;
}
Wenn Sie es char für char lesen möchten (damit Sie mehr Kontrolle darüber haben, was Sie speichern möchten und was nicht), können Sie Folgendes ausprobieren:
import java.io.BufferedReader;
import java.io.IOException;
[...]
public static String readNextWord(BufferedReader reader) throws IOException {
StringBuilder builder = new StringBuilder();
int currentData;
do {
currentData = reader.read();
if(currentData < 0) {
if(builder.length() == 0) {
return null;
}
else {
return builder.toString();
}
}
else if(currentData != ' ') {
/* Since you're talking about words, here you can apply
* a filter to ignore chars like ',', '.', '\n', etc. */
builder.append((char) currentData);
}
} while (currentData != ' ' || builder.length() == 0);
return builder.toString();
}
Und dann nenne es so:
String[] words = new String[amountOfWordsToRead];
for (int i = 0; i < amountOfWordsToRead; i++){
words [i] = readNextWord(yourBufferedReader);
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen