在Java中,我们可以使用Integer.parseInt()
或Integer.valueOf()
将String转换为int。
-
Integer.parseInt()
–返回原始int
。 -
Integer.valueOf()
–返回一个Integer
对象。
对于String
位置或负数,转换是相同的。
-
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. Integer.java
1.1查看Integer
类的JDK源代码,两个方法签名都相同,使用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. NumberFormatException
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()–将String转换为int
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
3.2对于字符串999AA
(无效数字),它将抛出NumberFormatException
,我们将其捕获并显示另一个更友好的错误消息。
String number = "999AA";
输出量
Terminal
Unable to convert input string :999AA to int
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");
-
}
-
}
-
}
输出量
Terminal
123
4.2对于输入String number = "123A"
Terminal
Unable to convert input string :123A 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]*");
-
}
-
}
-
}
输出量
Terminal
-100
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);
-
if (result.isEmpty()) {
-
System.out.println("Please provide a valid digit [0-9]");
-
} else {
-
System.out.println(result.get());
-
}
-
}
-
}
输出量
Terminal
10
参考文献
来源:Java –将字符串转换为int_一名可爱的技术搬运工-CSDN博客