Как читать до конца файла (EOF) с помощью BufferedReader в Java?

У меня проблема с чтением ввода до EOF в Java. Здесь есть один вход, и выход учитывает ввод каждой строки.

Пример:

ввод:

1
2
3
4
5

выход:

0 
1
0
1
0

Но, я закодировал с использованием Java, единственный вывод будет напечатан, когда я ввел два числа. Я хочу, чтобы один вход и печать выводили каждую строку (завершение EOF) с помощью BufferedReader в Java.

Это мой код:

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
StringBuffer pr = new StringBuffer("");

String str = "";
while((str=input.readLine())!=null && str.length()!=0) {
    BigInteger n = new BigInteger(input.readLine());
}

Ответ 1

Вы используете строку в, которая отбрасывается

while((str=input.readLine())!=null && str.length()!=0)

и читая Bigint в

BigInteger n = new BigInteger(input.readLine());

так что попробуйте получить Bigint из строки, которая читается как

BigInteger n = new BigInteger(str);

   Constructor used: BigInteger(String val)

Также измените while((str=input.readLine())!=null && str.length()!=0) на

while((str=input.readLine())!=null)

см связанную строку сообщения к bigint

readLine()
Returns:
    A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached 

увидеть Javadocs

Ответ 2

С текстовыми файлами, возможно, EOF равен -1 при использовании BufferReader.read(), char на char. Я сделал тест с BufferReader.readLine()!= Null, и он работал правильно.

Ответ 3

BufferReader.readLine()!=null не работает, когда у меня есть эти данные в моем файле:

 1
 2

 3
 4

В строке между 2 и 3 BufferReader.readLine() получит NULL.