Java:使用分隔符将原始数组连接在一起

问题描述 投票:24回答:8

假设我有一个数组:

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

而且我需要使用分隔符(例如," - "来连接其元素,因此结果应该是这样的字符串:

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

我该怎么做?

PS:是的,我知道thisthis帖子,但其解决方案不适用于一组原语。

java arrays join separator
8个回答
57
投票

这是我想出的。有几种方法可以执行此操作,它们取决于您使用的工具。


使用StringUtils中的ArrayUtilsCommon Lang

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

您不能只使用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(" - "));

实际上,使用流可以达到多种结果。

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

9
投票

在Java 8+中,您可以使用IntStreamIntStream。类似,

StringJoiner

输出是(根据要求)

StringJoiner

4
投票

您可以使用番石榴来加入元素。您可以在此处找到更多示例和文档。 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());

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

更确切地说,您应该首先将数组包装成具有https://github.com/google/guava/wiki/StringsExplained或Guava的Joiner.on("-") .join(texts); 等效项的List。>

Arrays.asList()

2
投票

我肯定也可以在Kotlin / Scala或其他JVM语言中执行此操作,但是对于上面这样的一小部分值,您始终可以坚持使事情简单:


1
投票

我一直在寻找一种在Stream中连接基本体而无需首先实例化每个基本体的字符串的方法。我来了,但是仍然需要装箱。


1
投票

Java 8解决方案如下:


0
投票
int i, arrLen = arr.length;
 StringBuilder tmp = new StringBuilder();
 for (i=0; i<arrLen-1; i++)
    tmp.append(arr[i] +" - ");
 tmp.append(arr[arrLen-1]);

 System.out.println( tmp.toString() );

0
投票

对于Java 7或更早版本。

© www.soinside.com 2019 - 2024. All rights reserved.