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
熟练掌握这些技巧,在日常编码中会让你事半功倍。