1. 简介
在本篇文章中,我们将介绍 如何在 Java 中使用单字符分隔符将基本类型数组合并为字符串。为了便于演示,我们主要以 int
数组和 char
数组为例。
2. 问题定义
首先,我们定义两个数组以及一个分隔符:
int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f'};
char separatorChar = '-';
String separator = String.valueOf(separatorChar);
注意:我们同时定义了 char
和 String
类型的分隔符,因为后续展示的方法中,有些要求传入 char
,有些则要求传入 String
。
最终的合并结果应为:
int
数组合并后:"1-2-3-4-5-6-7-8-9"
char
数组合并后:"a-b-c-d-e-f"
3. 使用 Collectors.joining()
这是 Java 8 Stream API 中提供的方法之一,使用起来非常简洁。
步骤如下:
- 使用
Arrays.stream()
将基本类型数组转为流; - 使用
mapToObj()
将每个元素转为String
; - 使用
Collectors.joining()
合并字符串。
对于 int
数组:
String joined = Arrays.stream(intArray)
.mapToObj(String::valueOf)
.collect(Collectors.joining(separator));
⚠️ 对于 char
数组,由于 Arrays.stream(char[])
并不直接支持,需要先包装为 CharBuffer
再进行处理:
String joined = CharBuffer.wrap(charArray).chars()
.mapToObj(intValue -> String.valueOf((char) intValue))
.collect(Collectors.joining(separator));
4. 使用 StringJoiner
与 Collectors.joining()
类似,StringJoiner
也支持通过流进行元素拼接。
对于 int
数组:
StringJoiner intStringJoiner = new StringJoiner(separator);
Arrays.stream(intArray)
.mapToObj(String::valueOf)
.forEach(intStringJoiner::add);
String joined = intStringJoiner.toString();
对于 char
数组,同样需要借助 CharBuffer
:
StringJoiner charStringJoiner = new StringJoiner(separator);
CharBuffer.wrap(charArray).chars()
.mapToObj(intChar -> String.valueOf((char) intChar))
.forEach(charStringJoiner::add);
String joined = charStringJoiner.toString();
5. Apache Commons Lang
如果你项目中已经引入了 Apache Commons Lang,可以使用 StringUtils
和 ArrayUtils
来简化操作。
首先添加依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
对于 int
数组:
String joined = StringUtils.join(ArrayUtils.toObject(intArray), separator);
或者直接使用 char
分隔符:
String joined = StringUtils.join(intArray, separatorChar);
对于 char
数组也类似:
String joined = StringUtils.join(ArrayUtils.toObject(charArray), separator);
或:
String joined = StringUtils.join(charArray, separatorChar);
✅ 简单粗暴,适合不想折腾流式操作的场景。
6. Google Guava
Guava 提供了 Joiner
工具类,使用起来也非常直观。
添加依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
对于 int
数组:
String joined = Joiner.on(separator).join(Ints.asList(intArray));
其中 Ints.asList()
可以将 int[]
转换为 List<Integer>
。
对于 char
数组:
String joined = Joiner.on(separator).join(Chars.asList(charArray));
7. 手动使用 StringBuilder
如果项目中不能使用第三方库,或者 Java 8+ 不可用,我们也可以手动拼接字符串:
if (array.length == 0) {
return "";
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < array.length - 1; i++) {
stringBuilder.append(array[i]);
stringBuilder.append(separator);
}
stringBuilder.append(array[array.length - 1]);
String joined = stringBuilder.toString();
✅ 这种方式适用于所有基本类型数组,逻辑清晰,无依赖。
8. 总结
本文展示了多种在 Java 中将基本类型数组使用分隔符合并为字符串的方式,包括:
- Java 8 原生方案(Stream +
Collectors.joining()
) StringJoiner
- 第三方库(Apache Commons Lang 和 Guava)
- 手动拼接(
StringBuilder
)
根据项目环境和依赖情况,选择最合适的方式即可。
📌 完整代码可参考:GitHub 示例项目