2012-05-17 2 views
1

Я хочу получить значение из текстового поля и преобразовать его в целое. Я написал следующий код, но он выбрасывает NumberFormatException.Java: NumberFormatException при преобразовании строки в целое число

String nop = no_of_people.getText().toString(); 
System.out.println(nop); 
int nop1 = Integer.parseInt(nop); 
System.out.println(nop1); 

Первый вызов System.out.println выводит мне номер, но преобразования в целое дает исключение. Что я делаю не так?

+7

, что делает это pr int? Можете ли вы рассказать нам точную строку * –

+2

Всегда используйте try/catch при попытке проанализировать строку, поступающую из текстового поля. И делайте базовую очистку, например, используя функцию trim(). –

+0

Убедитесь, что выровняете строку перед тем, как преобразовать ее в Integer. – Santosh

ответ

6

Обратите внимание, что синтаксический анализ завершится с ошибкой, если в строке есть пробелы. Вы можете либо обрезать строку сначала, используя метод .trim, либо выполнить замену всех с помощью .replaceAll("\\s+", "").

Если вы хотите избежать таких проблем, я бы рекомендовал вам использовать Formatted Text Field или Spinner.

Последние варианты гарантируют, что у вас есть числовые значения, и вы должны избегать использования блоков try catch.

0

Ваш TextBox может содержать номер с пробелом. Попробуйте изменить отредактированный код. Перед преобразованием в Integer вам необходимо обрезать значение TextBox. Также убедитесь, что значение не превышает целочисленный диапазон.

String nop=(no_of_people.getText().toString().trim()); 
System.out.println(nop); 
int nop1 = Integer.parseInt(nop); 
System.out.println(nop1); 
0

Попробуйте это:

int nop1 = Integer.parseInt(no_of_people.getText().toString().trim()); 
System.out.println(nop1); 
0

Я хотел бы предложить заменить все non-digit characters из строки первого преобразования в int:

replaceAll("\\D+", ""); 

Вы можете использовать этот код:

String nop=(no_of_people.getText().toString().replaceAll("\\D+", "")); 
System.out.printf("nop=[%s]%n", nop); 
int nop1 = Integer.parseInt(nop); 
System.out.printf("nop1=[%d]%n", nop1); 
+0

Я предлагаю не делать этого Ввод «12.34» или «12,34» (в зависимости от языка, который будет использоваться для плавающей запятой), и получение этого преобразования в целое число 1234 _ без предупреждения или ошибки может быть намного хуже (в зависимости от приложения), чем сбой. – Bananeweizen

+0

@ Bananeweizen: OP пытается преобразовать String в int, не плавающий или двойной. – anubhava

+0

Я знаю это. Но важно то, что если _user_ его приложения знает это или если этот пользователь p от ошибки при вводе значения с плавающей запятой. – Bananeweizen

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