Java:用分隔符连接基元数组
假设,我有一个数组:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
我需要使用分隔符来连接它的元素,例如" - "
,所以我得到这样的字符串:
"1 - 2 - 3 - 4 - 5 - 6 - 7"
我怎么能这样做?
PS:是的,我知道这个和这个post,但是它的解决方案不能用于一系列原语。
在这里,我想出了。 有几种方法可以做到这一点,他们取决于你使用的工具。
使用通用语言的 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)
。
适用于1.2版本的任何Java版本。
使用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, " - ");
在Java 8 +中,您可以使用IntStream
和StringJoiner
。 就像是,
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
您可以使用番石榴加入元素。 更多的例子和文档,你可以在那里find。 https://github.com/google/guava/wiki/StringsExplained
Joiner.on("-") .join(texts);
更确切的说,你应该首先将你的数组封装到List
使用Arrays.asList()
或Guava的原始友好等价物。
Joiner.on("-") .join(Arrays.asList(1, 2, 3, 4, 5, 6, 7)); Joiner.on("-") .join(Ints.asList(arr));
我相信在Kotlin / Scala或者其他JVM语言中也有这样的一个方法,但是你可以总是坚持让事情变得简单,像上面这样的一小组值:
int i, arrLen = arr.length; StringBuilder tmp = new StringBuilder(); for (i=0; i
int [] arr = new int [] {1,2,3,4,5,6,7};
IntStream.of(arr).mapToObj(i – > String.valueOf(i))。collect(Collectors.joining(“,”));