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

2022-09-01 03:27:29

假设,我有一个数组:

int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};

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

"1 - 2 - 3 - 4 - 5 - 6 - 7"

我该怎么做?

PS:是的,我知道这个这篇文章,但它的解决方案不适用于一系列基元。


答案 1

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


使用和从普通语言StringUtilsArrayUtils

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

你不能只使用,因为没有那个重载版本的方法。虽然,它有方法 。StringUtils.join(arr, " - ");StringUtilsStringUtils.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(" - "));

实际上,使用流可以获得结果有很多变化。

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

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

如果您坚持使用没有库的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();
}

比你可以做到:

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

答案 2

Java 8 解决方案是这样的:

Stream.of(1,2,3,4).map(String::valueOf).collect(Collectors.joining("-"))