Java中如何将String转换为int

Java中如何将String转换为int

技术背景

在Java编程中,经常会遇到需要将字符串类型的数据转换为整数类型的场景,例如从用户输入、文件读取或网络传输中获取到的数字通常是以字符串形式存在的,这时就需要将其转换为整数类型进行后续的数值计算和处理。

实现步骤

1. 使用Integer.parseInt()方法

这是最常用的方法,它可以将字符串解析为一个基本数据类型int。如果字符串无法解析为整数,会抛出NumberFormatException异常。

1
2
String myString = "1234";
int foo = Integer.parseInt(myString);

为了处理可能出现的异常,可以使用try-catch块:

1
2
3
4
5
6
int foo;
try {
foo = Integer.parseInt(myString);
} catch (NumberFormatException e) {
foo = 0;
}

2. 使用Integer.valueOf()方法

该方法返回一个Integer对象,它也可以将字符串转换为整数。在需要Integer对象时可以使用此方法。

1
2
String str = "1234";
Integer x = Integer.valueOf(str);

如果需要基本数据类型int,可以通过自动拆箱或调用intValue()方法:

1
2
3
int y = Integer.valueOf(str);
// 或者
int z = Integer.valueOf(str).intValue();

3. 使用Apache Commons的NumberUtils

NumberUtils.toInt()方法可以将字符串转换为整数,如果字符串不是有效的数字格式,则返回默认值(默认为0)。

1
2
3
import org.apache.commons.lang3.math.NumberUtils;

int num = NumberUtils.toInt("1234");

也可以指定默认值:

1
int num = NumberUtils.toInt("abc", 0); // 如果解析失败,返回0

4. 使用Google Guava的Ints

Ints.tryParse()方法可以尝试将字符串解析为整数,如果解析失败则返回null

1
2
3
4
5
6
import com.google.common.primitives.Ints;
import java.util.Optional;

Integer fooInt = Ints.tryParse("1234");
Optional<Integer> optionalInt = Optional.ofNullable(fooInt);
int result = optionalInt.orElse(0);

5. 手动实现转换

可以通过遍历字符串的每个字符,将其转换为对应的数字并计算最终结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int strToInt(String str) {
int i = 0;
int num = 0;
boolean isNeg = false;

// 检查负号
if (str.charAt(0) == '-') {
isNeg = true;
i = 1;
}

// 处理每个字符
while (i < str.length()) {
num *= 10;
num += str.charAt(i++) - '0';
}

if (isNeg) {
num = -num;
}

return num;
}

核心代码

以下是一个完整的示例代码,展示了上述几种方法的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import com.google.common.primitives.Ints;
import org.apache.commons.lang3.math.NumberUtils;
import java.util.Optional;

public class StringToIntConversion {
public static void main(String[] args) {
String str = "1234";

// 使用Integer.parseInt()
try {
int num1 = Integer.parseInt(str);
System.out.println("Integer.parseInt(): " + num1);
} catch (NumberFormatException e) {
System.out.println("Integer.parseInt() 解析失败");
}

// 使用Integer.valueOf()
Integer num2 = Integer.valueOf(str);
System.out.println("Integer.valueOf(): " + num2);

// 使用NumberUtils.toInt()
int num3 = NumberUtils.toInt(str);
System.out.println("NumberUtils.toInt(): " + num3);

// 使用Ints.tryParse()
Integer num4 = Ints.tryParse(str);
Optional<Integer> optionalInt = Optional.ofNullable(num4);
int result = optionalInt.orElse(0);
System.out.println("Ints.tryParse(): " + result);

// 手动实现转换
int num5 = strToInt(str);
System.out.println("手动实现转换: " + num5);
}

public static int strToInt(String str) {
int i = 0;
int num = 0;
boolean isNeg = false;

if (str.charAt(0) == '-') {
isNeg = true;
i = 1;
}

while (i < str.length()) {
num *= 10;
num += str.charAt(i++) - '0';
}

if (isNeg) {
num = -num;
}

return num;
}
}

最佳实践

  • 异常处理:在使用Integer.parseInt()Integer.valueOf()时,要注意处理NumberFormatException异常,避免程序崩溃。
  • 性能考虑:对于简单的转换,推荐使用Integer.parseInt(),因为它是最基本的方法,性能较好。如果需要处理复杂的输入或需要默认值,可以使用NumberUtils.toInt()Ints.tryParse()
  • 避免重复造轮子:尽量使用Java标准库或成熟的第三方库提供的方法,避免手动实现复杂的转换逻辑。

常见问题

1. 字符串包含非数字字符

如果字符串包含非数字字符,使用Integer.parseInt()Integer.valueOf()会抛出NumberFormatException异常。可以通过预处理字符串或使用正则表达式过滤非数字字符来解决。

1
2
3
4
5
6
7
8
String str = "abc123";
String filteredStr = str.replaceAll("[^\\d]", "");
try {
int num = Integer.parseInt(filteredStr);
System.out.println("过滤后的结果: " + num);
} catch (NumberFormatException e) {
System.out.println("解析失败");
}

2. 字符串长度过长导致溢出

如果字符串表示的数字超出了int类型的范围,会导致溢出。可以使用Long.parseLong()方法处理大数字。

1
2
3
4
5
6
7
String str = "2147483648";
try {
long num = Long.parseLong(str);
System.out.println("使用Long.parseLong(): " + num);
} catch (NumberFormatException e) {
System.out.println("解析失败");
}

3. 性能问题

手动实现转换逻辑可能会导致性能问题,尤其是在处理大量数据时。建议使用Java标准库或第三方库提供的方法,这些方法经过了优化,性能更好。


Java中如何将String转换为int
https://119291.xyz/posts/2025-04-22.java-string-to-int-conversion/
作者
ww
发布于
2025年4月23日
许可协议