Если вы посмотрите на документацию Java, вы заметите, что "загвоздка" в том, что эта функция может выдавать NumberFormatException, с которым вы можете справиться:
(В этой обработке искаженное число по умолчанию равно 0, но вы можете сделать что-то еще, если хотите.)
В качестве альтернативы вы можете использовать Ints метод из библиотеки Guava, который в сочетании с Java 8 Optional обеспечивает мощный и краткий способ преобразования строки в int:
Integerx= Integer.valueOf(str); // or inty= Integer.parseInt(str);
Между этими методами есть небольшая разница:
valueOf возвращает новый или кэшированный экземпляр java.lang.Integer
parseInt возвращает примитив int.
То же самое для всех случаев: Short.valueOf/parseShort, Long.valueOf/parseLong и т.д.
Ответ 3
Что ж, очень важный момент, который следует учитывать, заключается в том, что анализатор целых чисел выдает исключение NumberFormatException, как указано в Javadoc .
int foo; StringStringThatCouldBeANumberOrNot="26263Hello"; //will throw exception StringStringThatCouldBeANumberOrNot2="26263"; //will not throw exception try { foo = Integer.parseInt(StringThatCouldBeANumberOrNot); } catch (NumberFormatException e) { //Will Throw exception! //do something! anything to handle the exception. }
try { foo = Integer.parseInt(StringThatCouldBeANumberOrNot2); } catch (NumberFormatException e) { //No problem this time, but still it is good practice to care about exceptions. //Never trust user input :) //Do something! Anything to handle the exception. }
Важно обрабатывать это исключение при попытке получить целочисленные значения из разделенных аргументов или при динамическом анализе чего-либо.
// Check for negative sign; if it's there, set the isNeg flag if (str.charAt(0) == '-') { isNeg = true; i = 1; }
// Process each character of the string; while (i < str.length()) { num *= 10; num += str.charAt(i++) - '0'; // Minus the ASCII code of '0' to get the value of the charAt(i++). }