Java: join array of primitives with separator
You can use Guava for joining elements. More examples and docs you can find there. https://github.com/google/guava/wiki/StringsExplained
Joiner.on("-")
.join(texts);
To be more precise you should firstly wrap your array into a List
with Arrays.asList()
or Guava's primitive-friendly equivalents.
Joiner.on("-")
.join(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
Joiner.on("-")
.join(Ints.asList(arr));
Java 8 Solution would be like this:
Stream.of(1,2,3,4).map(String::valueOf).collect(Collectors.joining("-"))
Here what I came up with. There are several way to do this and they are depends on the tools you using.
Using StringUtils
and ArrayUtils
from Common Lang:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = StringUtils.join(ArrayUtils.toObject(arr), " - ");
You can't just use StringUtils.join(arr, " - ");
because StringUtils
doesn't have that overloaded version of method. Though, it has method StringUtils.join(int[], char)
.
Works at any Java version, from 1.2.
Using Java 8 streams:
Something like this:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = Arrays.stream(arr)
.mapToObj(String::valueOf)
.collect(Collectors.joining(" - "));
In fact, there are lot of variations to achive the result using streams.
Java 8's method String.join()
works only with strings, so to use it you still have to convert int[]
to String[]
.
String[] sarr = Arrays.stream(arr).mapToObj(String::valueOf).toArray(String[]::new);
String result = String.join(" - ", sarr);
If you stuck using Java 7 or earlier with no libraries, you could write your own utility method:
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();
}
Than you can do:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = myJoin(arr, " - ");
In Java 8+ you could use an IntStream
and a StringJoiner
. Something like,
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());
Output is (as requested)
1 - 2 - 3 - 4 - 5 - 6 - 7