String转int[]:将一个包含数字的字符串(如"1,2,3,4")转换成一个整数数组。int[]转String:将一个整数数组转换成一个格式化的字符串(如"[1, 2, 3, 4]")。- 处理异常情况:当字符串格式不正确时(如包含非数字字符),如何优雅地处理错误。
- Java 8+ 的 Stream API:使用现代、更简洁的 Stream API 来实现上述转换。
String 转 int[] (将字符串转换为整数数组)
假设我们有一个字符串 str = "10, 20, 30, 40, 50;",我们想把它转换成 int[] 数组。

核心步骤:
- 分割:使用
String.split()方法根据分隔符(如 或 )将字符串分割成一个字符串数组String[]。 - 转换:遍历
String[]数组,将每一个字符串元素转换为int类型。 - 存储:将转换后的
int值存入一个新的int[]数组中。
示例代码(传统方法)
public class StringToIntArray {
public static void main(String[] args) {
String str = "10, 20, 30, 40, 50";
// 1. 分割字符串
// 使用正则表达式 ",\\s*" 可以处理 "10,20" 或 "10, 20" 这样带空格的情况
String[] strArray = str.split(",\\s*");
// 2. 创建一个与字符串数组长度相同的 int 数组
int[] intArray = new int[strArray.length];
// 3. 遍历并转换
for (int i = 0; i < strArray.length; i++) {
// 使用 Integer.parseInt() 将字符串转换为 int
// 注意:如果字符串不是有效的数字,这里会抛出 NumberFormatException
intArray[i] = Integer.parseInt(strArray[i]);
}
// 4. 打印结果以验证
System.out.println("转换后的 int[] 数组:");
// 使用 Arrays.toString() 可以方便地打印数组内容
System.out.println(java.util.Arrays.toString(intArray));
// 输出: [10, 20, 30, 40, 50]
}
}
异常处理
如果输入的字符串可能包含非数字字符("10, abc, 30"),直接调用 Integer.parseInt() 会导致程序崩溃,使用 try-catch 块来处理 NumberFormatException 是一个好习惯。
public class StringToIntArrayWithException {
public static void main(String[] args) {
String str = "10, abc, 30";
String[] strArray = str.split(",\\s*");
int[] intArray = new int[strArray.length];
for (int i = 0; i < strArray.length; i++) {
try {
intArray[i] = Integer.parseInt(strArray[i]);
} catch (NumberFormatException e) {
System.err.println("警告: 无法将 '" + strArray[i] + "' 转换为整数,已将其设为 0。");
intArray[i] = 0; // 或者可以跳过此元素,或者终止程序
}
}
System.out.println("处理后的 int[] 数组:");
System.out.println(java.util.Arrays.toString(intArray));
// 输出: [10, 0, 30]
}
}
int[] 转 String (将整数数组转换为字符串)
假设我们有一个 int[] 数组 intArray = {100, 200, 300},我们想把它转换成类似 "[100, 200, 300]" 的字符串。
核心步骤:
- 创建
StringBuilder:为了高效地拼接字符串,我们使用StringBuilder。 - 遍历数组:遍历
int[]数组中的每一个元素。 - 拼接:将每个元素和分隔符(如逗号和空格)追加到
StringBuilder中。 - 转换为 String:最后调用
toString()方法得到最终的字符串。
示例代码(传统方法)
import java.util.Arrays;
public class IntArrayToString {
public static void main(String[] args) {
int[] intArray = {100, 200, 300};
// 方法一:使用 Arrays.toString() (最简单,但格式固定)
String str1 = Arrays.toString(intArray);
System.out.println("使用 Arrays.toString(): " + str1);
// 输出: [100, 200, 300]
System.out.println("--------------------");
// 方法二:手动构建 (更灵活,可以自定义格式)
StringBuilder sb = new StringBuilder();
sb.append("["); // 添加起始方括号
for (int i = 0; i < intArray.length; i++) {
sb.append(intArray[i]); // 添加数字
if (i < intArray.length - 1) {
sb.append(", "); // 如果不是最后一个元素,添加逗号和空格
}
}
sb.append("]"); // 添加结束方括号
String str2 = sb.toString();
System.out.println("手动构建: " + str2);
// 输出: [100, 200, 300]
}
}
Arrays.toString() vs 手动构建:
Arrays.toString():非常方便,一行代码就能搞定,但它生成的格式是固定的,并且会包含空格("[100, 200, 300]"),如果你需要完全自定义格式("[100|200|300]"),就必须手动构建。- 手动构建 (
StringBuilder):灵活性高,可以控制任何细节,但代码量稍多。
Java 8+ Stream API (现代方法)
从 Java 8 开始,引入了 Stream API,它提供了一种更函数式、更简洁的方式来处理集合和数组。

String 转 int[] (使用 Stream)
import java.util.Arrays;
import java.util.stream.Collectors;
public class StringToIntArrayStream {
public static void main(String[] args) {
String str = "10, 20, 30, 40, 50";
// 1. 分割字符串
String[] strArray = str.split(",\\s*");
// 2. 使用 Stream 转换
int[] intArray = Arrays.stream(strArray) // 1. 创建一个 String 类型的 Stream
.mapToInt(Integer::parseInt) // 2. 将每个 String 映射为 int
.toArray(); // 3. 将流转换回 int[] 数组
System.out.println("使用 Stream 转换后的 int[] 数组:");
System.out.println(Arrays.toString(intArray));
// 输出: [10, 20, 30, 40, 50]
}
}
Arrays.stream(strArray):将String[]转换为Stream<String>。.mapToInt(Integer::parseInt):这是核心步骤。mapToInt将Stream<String>转换为IntStream(一个专门用于int值的流)。Integer::parseInt是方法引用,等同于s -> Integer.parseInt(s)。.toArray():将IntStream收集并转换成一个int[]数组。
int[] 转 String (使用 Stream)
import java.util.Arrays;
import java.util.stream.Collectors;
public class IntArrayToStringStream {
public static void main(String[] args) {
int[] intArray = {100, 200, 300};
// 使用 Stream 和 Collectors.joining() 来构建自定义格式的字符串
String str = Arrays.stream(intArray) // 创建一个 IntStream
.mapToObj(String::valueOf) // 将每个 int 转换为 String
.collect(Collectors.joining(", ", "[", "]")); // 用指定分隔符和前后缀连接
System.out.println("使用 Stream 构建的字符串: " + str);
// 输出: [100, 200, 300]
}
}
Arrays.stream(intArray):直接从int[]创建IntStream。.mapToObj(String::valueOf):将IntStream中的每个int元素转换成String对象,得到一个Stream<String>。.collect(Collectors.joining(", ", "[", ")):这是一个非常强大的方法。- 元素之间的分隔符。
"[ ":整个拼接字符串的前缀。"]":整个拼接字符串的后缀。
总结与最佳实践
| 转换方向 | 传统方法 | Java 8+ Stream API | 推荐场景 |
|---|---|---|---|
| String -> int[] | str.split() + for 循环 + Integer.parseInt() |
Arrays.stream(strArray).mapToInt().toArray() |
Stream API 更简洁,代码可读性高,传统方法在旧版本 Java 或需要复杂异常处理逻辑时更灵活。 |
| int[] -> String | Arrays.toString() (简单) 或 StringBuilder (灵活) |
Arrays.stream().mapToObj().collect(Collectors.joining()) |
Arrays.toString() 最简单,适合快速打印。Stream API 的 joining() 最灵活,适合需要自定义格式的场景。 |
核心要点回顾:
String转int[]:关键是分割和逐个转换,要时刻注意NumberFormatException。int[]转String:关键是拼接。Arrays.toString()是最便捷的工具,StringBuilder或Stream提供了更高的灵活性。- 拥抱现代 Java:如果你使用的是 Java 8 或更高版本,Stream API 通常是更好的选择,因为它能让代码更简洁、更易读,也更符合函数式编程的思想。

