1. 概述

在本篇教程中,我们将聚焦于如何将字符串数组或整型数组转换为字符串,以及反向操作。这在日常开发中是一个常见需求,比如日志输出、数据拼接等场景。

使用原生 Java 以及常见工具库即可完成这类转换操作。

2. 数组转字符串

有时候我们需要把一个字符串数组或者整型数组转换成一个字符串。可惜的是,Java 并没有直接提供这样的方法。

如果直接对数组调用 toString() 方法,得到的结果类似于:

[Ljava.lang.String;@74a10858

这只是告诉我们对象的类型和哈希码,并没有什么实际意义。

不过幸运的是,Java 提供了 java.util.Arrays 工具类来处理这类问题。其中的 Arrays.toString() 方法可以将数组内容以字符串形式返回。

Arrays.toString() 返回的是一个以逗号分隔、并用方括号包裹的字符串:

String[] strArray = { "one", "two", "three" };
String joinedString = Arrays.toString(strArray);
assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 }; 
joinedString = Arrays.toString(intArray);
assertEquals("[1, 2, 3, 4, 5]", joinedString);

虽然 Arrays.toString() 已经很好用了,但我们也可以手动实现类似功能,来看看几种常见的做法。

2.1. 使用 StringBuilder.append()

这是最基础的手动拼接方式,适合自定义格式:

String[] strArray = { "Convert", "Array", "With", "Java" };
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strArray.length; i++) {
    stringBuilder.append(strArray[i]);
}
String joinedString = stringBuilder.toString();
assertEquals("ConvertArrayWithJava", joinedString);

⚠️ 如果是整型数组,则需要先转为字符串再追加,例如:

stringBuilder.append(Integer.valueOf(intArray[i]));

这种方式灵活性高,但代码稍显啰嗦。

2.2. Java Streams API

从 Java 8 开始,我们可以使用更现代的方式进行拼接:

使用 String.join()

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" });
assertEquals("ConvertWithJavaStreams", joinedString);

使用 Collectors.joining()

String joinedString = Arrays
    .stream(new String[]{ "Convert", "With", "Java", "Streams" })
    .collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);

💡 这两个方法都支持指定分隔符、前缀、后缀,非常实用。

2.3. StringUtils.join()

如果你项目中引入了 Apache Commons Lang,那这个工具类绝对值得推荐:

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" });
assertEquals("ConvertWithApacheCommons", joinedString);

✅ Apache Commons 的一大优势就是 null 安全,而且方法丰富,适合批量处理。

2.4. Joiner.join()

Google 的 Guava 同样提供了强大的拼接能力:

String joinedString = Joiner.on("")
        .skipNulls()
        .join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);

Joiner 支持跳过 null 值、设置分隔符,API 非常流畅,非常适合链式调用。

3. 字符串转字符串数组

有时候我们还需要把一个字符串按某个分隔符拆分成数组。

3.1. String.split()

最常用的莫过于 String.split() 方法:

String[] strArray = "loremipsum".split("");

结果如下:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

⚠️ 注意:空字符串作为分隔符时会按字符切分;如果是正则表达式要注意转义。

3.2. StringUtils.split()

还是那个熟悉的 Apache Commons,它提供了更安全的 split() 方法:

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

默认按照空白字符分割,输出:

["lorem", "ipsum", "dolor", "sit", "amet"]

✅ 和原生 split() 相比,它不会抛出 NPE,而且对 null 更友好。

3.3. Splitter.split()

Guava 的 Splitter 更加灵活,提供了 Fluent API:

List<String> resultList = Splitter.on(' ')
    .trimResults()
    .omitEmptyStrings()
    .splitToList("lorem ipsum dolor sit amet");   
String[] strArray = resultList.toArray(new String[0]);

输出:

["lorem", "ipsum", "dolor", "sit", "amet"]

✅ 可以自动去除首尾空格、过滤空串,比原生方法更加健壮。

4. 总结

本文介绍了如何在 Java 中完成数组到字符串的转换,以及反过来的操作。涵盖了以下内容:

功能 推荐方案
数组转字符串 Arrays.toString()(调试)
String.join() / Collectors.joining()(生产)
StringUtils.join() / Joiner.join()(工具库)
字符串转数组 String.split()(基础)
StringUtils.split()(安全)
Splitter.split()(灵活)

📌 踩坑提醒:

  • 直接打印数组变量只会输出地址信息
  • 分隔符涉及正则表达式时要小心转义
  • 处理用户输入建议优先使用工具类,避免 NPE

熟练掌握这些技巧,在日常编码中会让你事半功倍。