В Java мы можем использовать Integer.parseInt()
или Integer.valueOf()
для преобразования строки в int.
Целое число.Синтаксический анализ()
– вернуть примитивint
.Integer.valueOf()
– возвращаетЦелое число
объект.
Для положительного или отрицательного числа в строке
преобразование одно и то же.
String number = "7"; // result = 7 int result = Integer.parseInt(number); // result2 = 7 Integer result2 = Integer.valueOf(number);
String number = "-7"; // result = -7 int result = Integer.parseInt(number); // result2 = -7 Integer result2 = Integer.valueOf(number);
1. Для положительного или отрицательного числа в ||строке|| преобразование одно и то же.
1.1 Просмотрите исходный код JDK класса Integer
, обе сигнатуры метода одинаковы, используя parseInt(s,10)
для преобразования, но возвращайте другой результат.
package java.lang; public final class Integer extends Number implements Comparable, Constable, ConstantDesc { public static Integer valueOf(String s) throws NumberFormatException { return Integer.valueOf(parseInt(s, 10)); } public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); } //... }
2. Исключение NumberFormatException
2.1 Оба Integer.parseInt()
и Integer.valueOf(строка)
методы вызовут Исключение NumberFormatException
если ввод не является допустимой цифрой.
String number = "10AA"; Integer result = Integer.parseInt(number);
Выход
java.lang.NumberFormatException: For input string: "10A" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) at java.base/java.lang.Integer.parseInt(Integer.java:658) at java.base/java.lang.Integer.valueOf(Integer.java:989)
3. Integer.parseInt() – Преобразование строки представлять
3.1 В этом примере преобразуется строка 999
к примитивному типу int
.
package com.mkyong; public class StringExample1 { public static void main(String[] args) { String number = "999"; try { int result = Integer.parseInt(number); System.out.println(result); } catch (NumberFormatException e) { System.err.println("Unable to convert input string :" + number + " to int"); } } }
Выход
999
3.2 Для строки 999AA
, недопустимой цифры, она вызовет исключение NumberFormatException
, и мы поймаем его и отобразим другое более понятное сообщение об ошибке.
String number = "999AA";
Выход
Unable to convert input string :999AA to int
4. Integer.valueOf – Преобразовать строку в целое число
4.1 В этом примере преобразуется строка 123
к Целочисленному
объекту.
package com.mkyong; public class StringExample2 { public static void main(String[] args) { String number = "123"; try { Integer result = Integer.valueOf(number); System.out.println(result); } catch (NumberFormatException e) { System.err.println("Unable to convert input string :" + number + " to Integer"); } } }
Выход
123
4.2 Для ввода Строка
Unable to convert input string :123A to Integer
5. Лучшая практика – isDigit() +Целое число.Синтаксический анализ
Лучше всего проверять входные данные; исключение NumberFormatException
выбрасывается дорого.
5.1 Рассмотрим следующий пример, мы используем регулярное выражение Строка.соответствует("[0-9]*")
чтобы проверить, являются ли входные данные допустимыми цифрами.
package com.mkyong; public class StringExample3 { public static void main(String[] args) { String number = "-100"; if (isDigit(number)) { System.out.println(Integer.parseInt(number)); } else { System.out.println("Please provide a valid digit [0-9]"); } } public static boolean isDigit(String input) { // null or length < 0, return false. if (input == null || input.length() < 0) return false; // empty, return false input = input.trim(); if ("".equals(input)) return false; if (input.startsWith("-")) { // negative number in string, cut the first char return input.substring(1).matches("[0-9]*"); } else { // positive number, good, just check return input.matches("[0-9]*"); } } }
Выход
-100
6. Java 8
6.1 Разработчики, такие как Java 8, в этом примере пытаются использовать Java 8 Необязательно
и Поток
для преобразования Строка
в Целое число
.
package com.mkyong; import java.util.Optional; public class StringExample4 { public static void main(String[] args) { String number = "10"; Optionalresult = Optional.ofNullable(number) .filter(StringExample3::isDigit) .map(Integer::parseInt); if (result.isEmpty()) { System.out.println("Please provide a valid digit [0-9]"); } else { System.out.println(result.get()); } } }
Выход
10
Рекомендации
- Целое число.Синтаксический анализ JavaDoc
- Целое число.значение JavaDoc
- Исключение NumberFormatException javadoc
- Java – Проверьте, является ли строка числовой
Оригинал: “https://mkyong.com/java/java-convert-string-to-int/”