2013-01-24 2 views
-3

я получаю: java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)NumberFormatException при разборе строки, содержащие не-целые числа

, когда я пытаюсь использовать:

Integer.parseInt("h"); 

или

Integer.parseInt("h".toString()); 

, но я ожидал, что это работает, как atoi в с.

Что я здесь делаю неправильно?

+6

И что вы ожидаете получить? – Andremoniy

+0

Что именно вы хотите сделать? –

+0

вы пытаетесь преобразовать 'String' (а не число, представляемое как String, пусть« 1 », но буква) в' int'. Это ваша ошибка, но, как уже спрашивали: чего вы ожидаете? – ThanksForAllTheFish

ответ

3

Литеральный «h» String, очевидно, не представляет действительное целое число.

Предполагая h ваша String переменный, вам не нужно использовать кавычки:

String h = "1234"; 
Integer.parseInt(h); 

Update: Функции atoi возвращает целое значение входного аргумента и возвращает ноль, если значение входного не действует. В Java, можно написать так:

public static int javaAToI(String text) { 
    try { 
     return Integer.parseInt(text); 
    } catch (NumberFormatException e) { 
     return 0; 
    } 
} 
+0

Это работает, если моя строка является целым числом, как в вашем примере, но мне нужно преобразовать текст в int. например, строка h = "h"; – menemenemu

+0

Какое значение имел бы ваш «h»? – bjedrzejewski

+0

Вы ищете значение ascii «h», то? – Reimeus

1

Это будет работать, только если разобрать его на String, напоминающее Integer.

Вы разбираете его буквально "h", который не может быть интерпретирован как Integer. Если вы разобрали его "123", он будет работать.

Документацию по вашему методу можно найти here и документация, как правило, является хорошим местом для начала поиска.

Как и любой другой вариант, если h является вашей переменной, проанализируйте его таким образом: Integer.parseInt(h);.

Edit:

Если вы хотите, чтобы преобразовать char в int, вот ваш ответ: get char value in java

0

Java делает именно то, что он должен здесь. В atoi, когда вам возвращается 0, откуда вы знаете, содержит ли ваша строка 0, или если у нее была строка, которая не была проанализирована? Java обрабатывает это, сообщая вам, что вы попытались разобрать строку, которая не содержит значение параметра ... в идеале, чтобы вы могли вернуться и исправить код, который проходит в неповторимом значении.

В вашем случае, если вы хотите обрабатывать ситуацию точно так же, как это делает C, вы можете просто вернуть 0, если вы поймаете исключение NumberFormatException. (Возможно, было бы лучше, если бы вы могли вернуться и убедиться, что вы не проходите в плохих строках, но это не всегда возможно.)

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