杰瑞科技汇

Java字符串与int数组如何转换?

  1. Stringint[]:将一个包含数字的字符串(如 "1,2,3,4")转换成一个整数数组。
  2. int[]String:将一个整数数组转换成一个格式化的字符串(如 "[1, 2, 3, 4]")。
  3. 处理异常情况:当字符串格式不正确时(如包含非数字字符),如何优雅地处理错误。
  4. Java 8+ 的 Stream API:使用现代、更简洁的 Stream API 来实现上述转换。

String 转 int[] (将字符串转换为整数数组)

假设我们有一个字符串 str = "10, 20, 30, 40, 50;",我们想把它转换成 int[] 数组。

Java字符串与int数组如何转换?-图1
(图片来源网络,侵删)

核心步骤:

  1. 分割:使用 String.split() 方法根据分隔符(如 或 )将字符串分割成一个字符串数组 String[]
  2. 转换:遍历 String[] 数组,将每一个字符串元素转换为 int 类型。
  3. 存储:将转换后的 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]" 的字符串。

核心步骤:

  1. 创建 StringBuilder:为了高效地拼接字符串,我们使用 StringBuilder
  2. 遍历数组:遍历 int[] 数组中的每一个元素。
  3. 拼接:将每个元素和分隔符(如逗号和空格)追加到 StringBuilder 中。
  4. 转换为 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,它提供了一种更函数式、更简洁的方式来处理集合和数组。

Java字符串与int数组如何转换?-图2
(图片来源网络,侵删)

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):这是核心步骤。mapToIntStream<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() 最灵活,适合需要自定义格式的场景。

核心要点回顾:

  1. Stringint[]:关键是分割逐个转换,要时刻注意 NumberFormatException
  2. int[]String:关键是拼接Arrays.toString() 是最便捷的工具,StringBuilderStream 提供了更高的灵活性。
  3. 拥抱现代 Java:如果你使用的是 Java 8 或更高版本,Stream API 通常是更好的选择,因为它能让代码更简洁、更易读,也更符合函数式编程的思想。
Java字符串与int数组如何转换?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇