1. ホーム
  2. java

[解決済み] Javaです。テキストファイルの読み方

2023-07-11 10:27:12

質問

スペースで区切られた値を含むテキストファイルを読み込みたい。値は整数です。 これを読み込んで配列リストに入れるにはどうしたらよいでしょうか。

テキストファイルの内容の一例です。

1 62 4 55 5 6 77

として、配列リストで持ちたい。 [1, 62, 4, 55, 5, 6, 77] . Javaでどうすればいいのでしょうか?

どのように解決するのですか?

あなたは Files#readAllLines() を使うと、テキストファイルの全行が List<String> .

for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    // ...
}

チュートリアルです。 基本的なI/OとファイルI/O テキストファイルの読み書きと作成


あなたは String#split() を分割するために String を正規表現に基づいて分割します。

for (String part : line.split("\\s+")) {
    // ...
}

チュートリアルです。 数値と文字列 > 文字列 > 文字列内の文字を操作する


あなたは Integer#valueOf() を変換するために StringInteger .

Integer i = Integer.valueOf(part);

チュートリアルです。 数値と文字列; 文字列; 数値と文字列の相互変換


あなたは List#add() で要素を追加し List .

numbers.add(i);

チュートリアルです。 インターフェイス > リストインターフェイス


つまり、簡単に言うと(ファイルに空行や末尾/先頭の空白がないと仮定して)。

List<Integer> numbers = new ArrayList<>();
for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    for (String part : line.split("\\s+")) {
        Integer i = Integer.valueOf(part);
        numbers.add(i);
    }
}


もしあなたがすでにJava 8を使用しているのであれば、さらに ストリームAPI で始まる Files#lines() .

List<Integer> numbers = Files.lines(Paths.get("/path/to/test.txt"))
    .map(line -> line.split("\\s+")).flatMap(Arrays::stream)
    .map(Integer::valueOf)
    .collect(Collectors.toList());

チュートリアルです。 Java 8ストリームを使ったデータ処理