0Pricing
Java Academy · レッスン

行の読み取り

readLineとループを学びます。

「行の読み取り」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

readLineメソッド

readLine()はBufferedReaderの中心となるメソッドです。改行(Enter)に到達するまで文字を読み取り、その行をStringとして返します。

返されるテキストには改行文字は含まれません。このレッスンでは、1行および複数行の読み取りを行います。

String line = br.readLine();

1行を読み取る

最も単純な例として、名前を読み取り、挨拶を表示します。readLine()は、ユーザーがEnterを押すまでブロックして待機します。

System.inから読み取るため、このスニペットはキーボード入力を待ち、ここでは自動実行できません。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String name = br.readLine();
        System.out.println("Welcome, " + name + "!");
    }
}

入力の終端でreadLineが返す値

入力がもう存在しない場合(ストリームの終端、またはユーザーがEOFを送信した場合)、readLine()はStringの代わりにnullを返します。

これは重要なシグナルです。nullを確認することで、読み取りを停止するタイミングが分かります。

String line = br.readLine();
if (line == null) {
    System.out.println("No more input.");
}

EOFまで読み取る

入力が終わるまで各行を読み取るには、readLine()がnullでない間ループします。この一般的なパターンでは、1つの条件式で代入と確認を行います。

ループを1回繰り返すたびに次の行が得られ、nullになるとループが正常に停止します。

String line;
while ((line = br.readLine()) != null) {
    System.out.println("Got: " + line);
}

複数行の読み取り

ストリームが終わるまで入力したすべての行をエコーバックする完全なプログラムを見てみましょう。

System.inから読み取るため入力を待ち、ここでは自動実行できませんが、ループのパターンはそのまま再利用できます。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println("Echo: " + line);
        }
    }
}

行数を数える

数を数えるなど、ループ内で処理を行うこともできます。ここでは読み取った行数を集計します。

反復ごとに新しい行を読み取り、カウンターを増やします。入力が終わると合計を表示します。

int count = 0;
String line;
while ((line = br.readLine()) != null) {
    count++;
}
System.out.println("Lines read: " + count);

空行とnullの違い

注意してください。空行(ユーザーがEnterだけを押した場合)は空のStringである""を返し、nullは返しません。

したがって、"".equals(line)は空行を意味し、line == nullは入力が本当に終了したことを意味します。これらは異なるものです。

if (line == null) {
    // input finished
} else if (line.isEmpty()) {
    // user pressed Enter on a blank line
}

stdinなしで行をシミュレートする

キーボード入力なしでreadLine()の動作を確認するには、StringReaderからBufferedReaderに入力を渡します。これは完全に実行可能です。

文字列には\nで区切られた2行が含まれており、ループがそれぞれの行を表示します。

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new StringReader("apple\nbanana"));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println("Fruit: " + line);
        }
    }
}

空白をトリミングする

入力には余分な空白が含まれていることがよくあります。行を使う前にtrim()を使用して、先頭と末尾の空白を削除します。

ユーザーが誤って空白を追加した場合でも、比較やパースの信頼性を保てます。

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new StringReader("  hello  \n"));
        String line = br.readLine().trim();
        System.out.println("[" + line + "]");
    }
}

決まった行数を読み取る

あらかじめ行数が分かっている場合もあります。forループを使うと、指定された行数だけ正確に読み取れます。

これは「最初の数値が、後に続く行数を示す」という問題でよく使われます。

for (int i = 0; i < 3; i++) {
    String item = br.readLine();
    System.out.println(i + ": " + item);
}

readLineで覚えておくこと

次の点を覚えておきましょう:

  • 行を使う前に、必ずnullかどうかを確認します。
  • 余分な空白がバグの原因になる可能性がある場合はtrim()を使います。
  • 空の文字列はnullと同じではありません。

次は、これらの行を数値に変換します。

確認問題

入力ストリームが終端に達したとき、readLine()は何を返しますか?

まとめ

1行ずつ読み取り、while ((line = br.readLine()) != null)でループし、空行("")と入力の終端(null)を区別する方法を学びました。

StringReaderを使った実行可能な例も確認しました。次は、テキスト行を数値に変換します。

よくある質問

「行の読み取り」レッスンは無料ですか?

はい。「行の読み取り」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「行の読み取り」で何を学びますか?

readLineとループを学びます。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「行の読み取り」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. BufferedReaderを使う理由
  2. 行の読み取り
  3. 入力から数値を解析する
  4. ストリームを安全に閉じる
← Java Academyに戻る