2015-08-05 2 views
-2

Почему возникает исключение при анализе символов на целое число с использованием метода read() вместо readLine() из BufferedReader. Я попытался с помощью этого кода ниже:Метод read() BufferedReader и InputStreamReader

BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
int a= Integer.parseInt(br.read()); 

ошибка: не может преобразовать Int в строку .. очень странно ошибка

+0

попробуйте с этим 'Integer.toString (integer)' FYI http://stackoverflow.com/questions/8973381/why-cannot-cast-integer-to-string-in-java –

+0

Нет, я не хочу конвертировать целое число в строку. поэтому я написал странное errror .. как я хочу преобразовать символ в целое, используя метод чтения – Isha

+0

Читать @Jon ответ –

ответ

1

Reader.read() просто возвращает один символ, но как int, так что вы можете узнать, достигли ли вы конца данных.

Теперь нет никакого метода Integer.parseInt(int), поэтому вызов не работает - нет даже Integer.parseInt(char). Вы можете конвертировать в char, а затем вызвать Character.getNumericValue(char) ... или вы могли бы просто использовать:

int digit = br.read() - '0'; 

..., а затем проверить, что digit находится в диапазоне 0-9.

В качестве альтернативы вы могли создать строку из одного символа вы читали и называете Integer.parseInt, но это кажется излишним ...

+0

Отлично, спасибо Jon. – Isha

+0

может у вас рассказать, что в основном это «0» делает в вашем коде: (((int digit = br.read() - '0';)))) – Isha

+1

@ Иша: Это вычитает код UTF-16 для цифра 0 ... в основном целое число, которое вы получаете, является кодовым блоком UTF-16 для символа на входе, и вы хотите преобразовать '0' в целое число 0, '1' в целое число 1 и т. д. ... как единицы кода от «0» до «9» смежны, вы можете просто вычесть «0». –

1

Вам нужно разобрать String в Integer.parseInt("need a String").

Но вы здесь int. br.read() возвращать int

Вы можете использовать

BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
int a= br.read(); 

Edit:

Да, когда вы входите 5, br.read() чтения как 53, так как юникод значение '5' является 53.

Итак, вы хотите иметь дело с int. вы можете попробовать int a=Integer.parseInt(br.readLine());

+0

Я хочу проанализировать число, как 4 или 5 или любое целочисленное значение, которое читается как символ через read() способ – Isha

+0

@Isha да. Вы можете попробовать это. –

+0

Когда вы говорите «или любое целое значение», вы имеете в виду «любую цифру»? Поскольку 'read()' только читает один символ ... как бы вы ожидали прочитать номер 1234 таким образом? –

0

Используйте readLine() функцию. В этом случае значение считывается как строка.

int a= Integer.parseInt(br.readLine()); 

read() метод возвращает символ в виде целого числа. parseInt() ожидает строку, но вы даете целое число. Итак, здесь код int a= Integer.parseInt(br.read()) пытается преобразовать int в int. Отсюда и ошибка.

+0

Да, я знаю, что могу сделать это с помощью readLine(). Но вопрос, почему мы не можем сделать это с помощью read() – Isha

0

Reader и его подклассы содержат int read() метод, который считывает один символ как int.

Причина она возвращает int вместо char потому, что он должен быть в состоянии вернуть -1, когда конец потока достигнут (а также 65536 символов, которые char предоставляет).

Если вы хотите прочитать один символ, вы можете просто проверить, что значение не равно -1, а затем передать его на char.Если вы хотите рассматривать символ как значение int, вам не нужно ничего делать.

Смежные вопросы