Java:使用分隔符连接基元数组

spi*_*rit 25 java arrays join separator

假设,我有一个数组:

int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
Run Code Online (Sandbox Code Playgroud)

我需要使用分隔符连接其元素,例如," - "因此我应该得到这样的字符串:

"1 - 2 - 3 - 4 - 5 - 6 - 7"
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

PS:是的,我知道这个这个帖子,但它的解决方案不适用于一系列原语.

spi*_*rit 61

这就是我想出来的.有几种方法可以做到这一点,它们取决于您使用的工具.


使用StringUtilsArrayUtils来自Common Lang:

int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = StringUtils.join(ArrayUtils.toObject(arr), " - ");
Run Code Online (Sandbox Code Playgroud)

你不能只是使用StringUtils.join(arr, " - ");因为StringUtils没有那个重载版本的方法.虽然,它有方法StringUtils.join(int[], char).

适用于任何Java版本,从1.2开始.


使用Java 8流:

像这样的东西:

int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = Arrays.stream(arr)
        .mapToObj(String::valueOf)
        .collect(Collectors.joining(" - "));
Run Code Online (Sandbox Code Playgroud)

事实上,使用流来实现结果有很多变化.

Java 8的方法String.join()仅适用于字符串,因此要使用它仍然需要转换int[]String[].

String[] sarr = Arrays.stream(arr).mapToObj(String::valueOf).toArray(String[]::new);
String result = String.join(" - ", sarr);
Run Code Online (Sandbox Code Playgroud)

如果你坚持使用Java 7或更早版本没有库,你可以编写自己的实用工具方法:

public static String myJoin(int[] arr, String separator) {
    if (null == arr || 0 == arr.length) return "";

    StringBuilder sb = new StringBuilder(256);
    sb.append(arr[0]);

    //if (arr.length == 1) return sb.toString();

    for (int i = 1; i < arr.length; i++) sb.append(separator).append(arr[i]);

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

比你能做的:

int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = myJoin(arr, " - ");
Run Code Online (Sandbox Code Playgroud)

  • 您可以`.collect(Collectors.joining(","))`而不是临时字符串数组. (3认同)
  • 很好的概述!对于java 1.7版本:从技术上讲,你不需要在循环之前进行arr.length == 1检查,但这也很有效. (2认同)

use*_*131 13

Java 8 解决方案是这样的:

Stream.of(1,2,3,4).map(String::valueOf).collect(Collectors.joining("-"))
Run Code Online (Sandbox Code Playgroud)


Ell*_*sch 9

在Java 8+中你可以使用a IntStream和a StringJoiner.就像是,

int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7 };
StringJoiner sj = new StringJoiner(" - ");
IntStream.of(arr).forEach(x -> sj.add(String.valueOf(x)));
System.out.println(sj.toString());
Run Code Online (Sandbox Code Playgroud)

输出(根据要求)

1 - 2 - 3 - 4 - 5 - 6 - 7
Run Code Online (Sandbox Code Playgroud)


RMa*_*nik 5

您可以使用 Guava 来连接元素。您可以在那里找到更多示例和文档。https://github.com/google/guava/wiki/StringsExplained

Joiner.on("-")
      .join(texts);
Run Code Online (Sandbox Code Playgroud)

更准确地说,您应该首先将数组包装成ListwithArrays.asList()或 Guava 的原始友好等价物。

Joiner.on("-")
      .join(Arrays.asList(1, 2, 3, 4, 5, 6, 7));

Joiner.on("-")
      .join(Ints.asList(arr));
Run Code Online (Sandbox Code Playgroud)

  • 对于原始数组,Gava 提供原始的 `.asList()` 方法,例如 [`Ints.asList()`](https://google.github.io/guava/releases/snapshot/api/docs/com/google/common /primitives/Ints.html#asList(int...)) - 你不能对原始数组使用 `Array.asList()`。 (2认同)