wake-up-neo.com

Wie liest man ein einzelnes Wort (oder eine Zeile) aus einer Java-Textdatei?

Wie der Titel schon sagt, versuche ich, ein Programm zu schreiben, das einzelne Wörter aus einer Textdatei lesen und in String Variablen speichern kann. Ich kann eine FileReader oder FileInputStream verwenden, um eine einzelne char zu lesen, aber für das, was ich versuche, funktioniert das nicht. Sobald ich die Wörter eingegeben habe, versuche ich, diese mit anderen String-Variablen in meinem Programm zu vergleichen, indem ich .equals verwende. Daher ist es am besten, wenn ich sie als Strings importieren kann. Ich kann auch eine ganze Zeile aus einer Textdatei als Zeichenfolge eingeben. In diesem Fall füge ich in jede Zeile meiner Datei nur ein Wort ein. Wie gebe ich Wörter aus einer Textdatei ein und speichere sie in String-Variablen?

EDIT: Okay, diese doppelte Art von Hilfen. Es könnte für mich funktionieren, aber der Grund, warum meine Frage etwas anders ist, ist, dass das Duplikat nur sagt, wie man eine einzelne Zeile liest. Ich versuche, die einzelnen Wörter in der Zeile zu lesen. Also im Grunde die Zeile String aufteilen.

4
Ashwin Gupta

Um Zeilen aus einer Textdatei zu lesen, können Sie Folgendes verwenden (verwendet try-with-resources):

String line;

try (
    InputStream fis = new FileInputStream("the_file_name");
    InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
    BufferedReader br = new BufferedReader(isr);
) {
    while ((line = br.readLine()) != null) {
        // Do your thing with line
    }
}

Kompaktere, weniger lesbare Version desselben:

String line;

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("the_file_name"), Charset.forName("UTF-8")))) {
    while ((line = br.readLine()) != null) {
        // Do your thing with line
    }
}

Um eine Zeile in einzelne Wörter zu unterteilen, können Sie String.split verwenden:

while ((line = br.readLine()) != null) {
    String[] words = line.split(" ");
    // Now you have a String array containing each Word in the current line
}
7
spork

Das sind alles sehr komplexe Antworten. Und ich bin sicher, dass sie alle nützlich sind. Aber ich bevorzuge die elegant einfach Scanner:

public static void main(String[] args) throws Exception{
    Scanner sc = new Scanner(new File("fileName.txt"));
    while(sc.hasNext()){
        String s = sc.next();
        //.....
    }
}
7
Misha

In Java8 können Sie etwa Folgendes tun:

import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.Paths;
import Java.util.Arrays;
import Java.util.Collections;
import Java.util.List;
import Java.util.stream.Collectors;

public class Foo {
    public List<String> readFileIntoListOfWords() {
        try {
            return Files.readAllLines(Paths.get("somefile.txt"))
                .stream()
                .map(l -> l.split(" "))
                .flatMap(Arrays::stream)
                .collect(Collectors.toList());
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return Collections.emptyList();
    }
}

Ich vermute jedoch, dass das zu spaltende Argument möglicherweise geändert werden muss, z. B. um die Interpunktion am Ende eines Wortes zu reduzieren

1
beresfordt

Sie müssen StringTokenizer verwenden! hier ein Beispiel und lesen Sie diese String Tokenizer

private BufferedReader innerReader; 
public void loadFile(Reader reader)
        throws IOException {
    if(reader == null)
    {
        throw new IllegalArgumentException("Reader not valid!");
    }
        this.innerReader = new BufferedReader(reader);
    String line;
    try
    {
    while((line = innerReader.readLine()) != null)
    {
        if (line == null || line.trim().isEmpty())
            throw new IllegalArgumentException(
                    "line empty");
        //StringTokenizer use delimiter for split string
        StringTokenizer tokenizer = new StringTokenizer(line, ","); //delimiter is ","
        if (tokenizer.countTokens() < 4)
            throw new IllegalArgumentException(
                    "Token number not valid (<= 4)");
        //You can change the delimiter if necessary, string example
        /*
        Hello / bye , hi
        */
        //reads up "/"
        String hello = tokenizer.nextToken("/").trim();
        //reads up ","
        String bye = tokenizer.nextToken(",").trim();
        //reads up to end of line
        String hi = tokenizer.nextToken("\n\r").trim();
        //if you have to read but do not know if there will be a next token do this
        while(tokenizer.hasMoreTokens())
        {
          String mayBe = tokenizer.nextToken(".");
        }
    }
    } catch (Exception e) {
        throw new IllegalArgumentException(e);
    }
}
1
Michele Lacorte