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);

注意:我们同时定义了 charString 类型的分隔符,因为后续展示的方法中,有些要求传入 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 中提供的方法之一,使用起来非常简洁。

步骤如下:

  1. 使用 Arrays.stream() 将基本类型数组转为流;
  2. 使用 mapToObj() 将每个元素转为 String
  3. 使用 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,可以使用 StringUtilsArrayUtils 来简化操作。

首先添加依赖:

<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 示例项目


原始标题:Join Array of Primitives with Separator in Java