我们可以逐行从stdin读取过滤器的整个输入吗?

时间:2017-09-02 06:48:00

标签: java

如果a的文件包含如下内容。如何在stdin中输入该内容并在has程序中逐行读取。如果我使用Scanner,则一次不会占用整个内容。每次进入后它只需逐行进行。 文件内容

10 Bla Blah Blah
20 Bla Bla Bla
20 Bpa bla bla
40 Bla Bla Bla

1 个答案:

答案 0 :(得分:0)

以下代码从输入中获取字符,直到用户在Linux / Unix中按Ctrl + D或在Windows中按Ctrl + Z:

public static void main(String[] args) throws IOException {
    String text = readUntilEOF(System.in);
}

private static String readUntilEOF(InputStream in) throws IOException {
    StringBuilder stringBuilder = new StringBuilder();
    char ch;

    do {
        ch = (char) in.read();
        stringBuilder.append(ch);
    }while(ch != CharacterIterator.DONE);

    stringBuilder.deleteCharAt(stringBuilder.length() - 1);
    return stringBuilder.toString();
}

此代码的缺点是用户必须在每行的末尾按Enter键,因为如果它们在行的末尾按Ctrl + D / Ctrl + Z,则该行将被完全忽略。如果您想避免此问题,可以假设另一个字符显示输入结束。