7

コンソールからテキスト行を読み込もうとしています。行数は事前にはわかりません。BufferedReader.readLine()メソッドは行を読み取りますが、最後の行の後、コンソールからの入力を待ちます。これを回避するために何をすべきですか?

以下のコードスニペットをご覧ください。

    public static String[] getLinesFromConsole() {
    String strLine = "";
    try {
        // Get the object of DataInputStream
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null)
            strLine += line + "~"; //edited

        isr.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strLine.split("~");
}
4

2 に答える 2

4

以下のコードは修正される可能性があり、テキストexitを要件固有の文字列に置き換えます

  public static String[] getLinesFromConsole() {
    String strLine = "";
    try {
        // Get the object of DataInputStream
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null && !line.equals("exit") )
            strLine += br.readLine() + "~";

        isr.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strLine.split("~");
}
于 2013-01-29T10:57:27.853 に答える
1

コンソールから読み取る場合、コンソールは (ファイルとは異なり) 「終了」しない (プログラムが終了した後も実行し続ける) ため、「終了」入力を定義する必要があります。

あなたの問題にはいくつかの解決策があります:

  1. 入力をファイルに入れ、IO リダイレクトを使用します。java ... < input-file

    シェルはプロセスを入力ファイルに接続し、EOF を取得します。

  2. コンソールの EOF 文字を入力します。Linux と Mac では 、Ctrl+DWindows ではCtrl+Z+です。Enter

  3. 空行を読んだら停止します。そうすれば、ユーザーは単に入力できますEnter

PS: コードにバグがあります。2 回呼び出すとreadLine()、2 行おきにスキップされます。

于 2013-01-29T10:59:21.263 に答える