Java:字符串(String)类型转成整型(int)的方法
在 Java 中,我们可以使用 Integer.parseInt() 或 Integer.valueOf() 将 String 转换为 int。
Integer.parseInt() – 返回原始整数。 Integer.valueOf() – 返回一个 Integer 对象。
对于字符串中的位置或负数,转换是相同的
String number = "-7"; // result = -7 int result = Integer.parseInt(number); // result2 = -7 Integer result2 = Integer.valueOf(number);
1.Integer.java
1.1 查阅JDK源码中Integer类,两个方法签名是一样的,都是使用parseInt(s,10)进行转换,但是返回的结果不同
Integer.java package java.lang; public final class Integer extends Number implements Comparable<Integer>, 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. 数字格式异常
2.1 如果输入不是有效数字,Integer.parseInt() 和 Integer.valueOf(String) 方法都会抛出 NumberFormatException
String number = "10AA"; Integer result = Integer.parseInt(number);
输出:
Terminal 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。
StringExample1.java 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"); } } }
输出:
Terminal 999
4. Integer.valueOf – 将字符串转换为整数
4.1 本示例将字符串 123 转换为 Integer 对象
StringExample2.java 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"); } } }
5. 最佳实践 – isDigit() + Integer.parseInt
最佳做法是检查输入;抛出的 NumberFormatException 代价很高。
5.1 回顾下面的例子,我们使用正则表达式 String.matches("[0-9]*") 来检查输入是否为有效数字。
StringExample3.java 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]*"); } } }
6. Java 8
6.1 开发者喜欢Java 8,这个例子尝试使用Java 8 Optional 和Stream 将String 转换为Integer
StringExample4.java package com.mkyong; import java.util.Optional; public class StringExample4 { public static void main(String[] args) { String number = "10"; Optional<Integer> result = Optional.ofNullable(number) .filter(StringExample3::isDigit) .map(Integer::parseInt);#Java##程序员#