假设我有一个数组:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
而且我需要使用分隔符(例如," - "
来连接其元素,因此结果应该是这样的字符串:
"1 - 2 - 3 - 4 - 5 - 6 - 7"
我该怎么做?
这是我想出的。有几种方法可以执行此操作,它们取决于您使用的工具。
使用StringUtils
中的ArrayUtils
和Common 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, " - ");
您可以使用番石榴来加入元素。您可以在此处找到更多示例和文档。 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()
我肯定也可以在Kotlin / Scala或其他JVM语言中执行此操作,但是对于上面这样的一小部分值,您始终可以坚持使事情简单:
我一直在寻找一种在Stream中连接基本体而无需首先实例化每个基本体的字符串的方法。我来了,但是仍然需要装箱。
Java 8解决方案如下:
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() );
对于Java 7或更早版本。