Java: join array of primitives with separator
假设我有一个数组:
1 | int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7}; |
我需要使用分隔符来连接它的元素,例如
1 | "1 - 2 - 3 - 4 - 5 - 6 - 7" |
我怎么能这样做?
附言:是的,我知道这个和这个帖子,但是它的解决方案不能与一系列的原语一起工作。
这就是我想到的。有几种方法可以做到这一点,它们取决于您使用的工具。
使用来自普通语言的
1 2 | int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7}; String result = StringUtils.join(ArrayUtils.toObject(arr)," -"); |
您不能仅仅使用
在任何Java版本中工作,从1.2开始。
使用Java 8流:
像这样:
1 2 3 4 |
事实上,使用流实现结果有很多变化。
Java 8的方法EDCOX1(5)仅适用于字符串,因此,使用它仍然需要将EDCOX1的6度转换为EDCOX1(7)。
1 2 |
如果你坚持使用Java 7或更早的没有库,你可以编写你自己的实用方法:
1 2 3 4 5 6 7 8 9 10 11 12 | 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(); } |
比你能做的还多:
1 2 |
在Java 8 +中,可以使用EDCOX1、10和EDCOX1 11。有点像
1 2 3 4 |
输出为(按要求)
1 | 1 - 2 - 3 - 4 - 5 - 6 - 7 |
您可以使用guava来连接元素。你可以在那里找到更多的例子和文档。https://github.com/google/guava/wiki/stringsexplained网站
1 2 | Joiner.on("-") .join(texts); |
更准确地说,您应该首先将数组包装成一个
1 2 3 4 5 |
我相信有一种方法可以用Kotlin/scala或其他JVM语言来实现这一点,但是对于上面提到的一小部分值,您可以始终坚持保持简单:
1 2 3 4 5 6 7 | 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 8的解决方案是这样的:
1 |
我一直在寻找一种方法来连接流中的原语,而不需要先为它们中的每一个实例化字符串。我来这里了,但还是需要拳击他们。
1 2 3 4 5 | LongStream.range(0, 500).boxed().collect(Collector.of(StringBuilder::new, (sb, v) -> { if (sb.length() != 0) sb.append(','); sb.append(v.longValue()); }, (a, b) -> a.length() == 0 ? b : b.length() != 0 ? a.append(',').append(b) : a, StringBuilder::toString)); |
1 2 3 | int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7 }; IntStream.of(arr).mapToObj(i -> String.valueOf(i)).collect(Collectors.joining(",")) ; |
在Java8中,可以使用如下字符串类: