Finally Java has convenient and intuitive API for joining strings with delimiters! Since Java 8 there is StringJoiner class. It is an API that you may know from Guava Joiner classes (see my post: https://looksok.wordpress.com/2015/10/17/guava-joiner-join-all-strings-in-an-array-or-map/). Here is a short StringJoiner demo.
Basic String joins
The most basic usage is to create StringJoiner instance with delimiter as a constructor param and add() strings:
StringJoiner joiner = new StringJoiner(","); joiner.add("apple"); joiner.add("banana"); joiner.add("orange"); System.out.println("Joiner result is: " + joiner.toString());
The result is:
Joiner result is: apple,banana,orange
If you prefer, you can chain add() calls:
StringJoiner joiner = new StringJoiner(",") .add("apple") .add("banana") .add("orange");
Join Collection of Strings
If you have Collection of Strings, the new static String.join() method can join them:
List<String> list = Arrays.asList("apple", "banana", "orange"); String joined = String.join(", ", list); System.out.println("Join Array result is: " + joined);
With the result of:
Join Array result is: apple, banana, orange
Join inline
You can prepare joined String in one line with String.join() overloaded with varargs, like that:
String.join(", ", "apple", "banana", "orange");
Joining Collector in Stream API
When using streams you have joining Collector at your disposal:
List<String> list = Arrays.asList("apple", "banana", "orange"); String joined = list.stream() .collect(Collectors.joining(", ")); System.out.println("Joined with collector: " + joined);
This will result with:
Joined with collector: apple, banana, orange
Source Code
As always, I share with you the source code for this demo on my github: https://github.com/yacekmm/looksok/tree/StringJoinerDemo/Java/JavaDemo