答案 1
这是我想到的。有几种方法可以做到这一点,它们取决于您使用的工具。
使用和从普通语言:StringUtils
ArrayUtils
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, " - ");
答案 2
Java 8 解决方案是这样的:
Stream.of(1,2,3,4).map(String::valueOf).collect(Collectors.joining("-"))
推荐
-
-
为什么 Array.newInstance(Class<?>, int) 不是通用的? 我的意思是,这有什么好的理由吗?该具有以下签名: 是否有任何充分的理由将返回值类型声明为 ?对我来说,这似乎非常不方便。
-
-
为什么我可以收集任意大数组的并行流,但不能收集顺序流? 在回答时,我遇到了一个奇特的功能。下面的代码按照我的假设工作(现有数组中的前两个值将被覆盖): 我很好奇为什么顺序流不会像并行流那样覆盖数组的元素。我搜索了一下,无法找到
-
Java JNI 调用的开销 首先让我说,这个问题更多的是出于好奇心,而不是真正的必要性。 我很想知道从Java执行JNI调用的开销是多少,比如说,与分配数组并使用for循环复制元素相比。 如果开销很大