Joining Strings in Java 8

Omkar Shetkar
Javarevisited
Published in
2 min readSep 5, 2021

Java is addressing issue of boiler plate code which developers can hardly avoid. One such boiler plate code is concatenating list of strings with a delimiter. This has been mainly used by developers to write formatted output.

For example:

For a list of city names we may want to print as

[Bangalore, Delhi, Mumbai, Chennai, Kolkata]

Traditional Way

String[] cities = { "Bangalore", "Delhi", "Mumbai", "Chennai", "Kolkata" };StringBuilder output = new StringBuilder();
output.append("[");
for (int i = 0; i < cities.length; i++) {
output.append(cities[i]);
if(i<cities.length-1)
output.append(",");
}
output.append("]");
System.out.println(output);Output:[Bangalore,Delhi,Mumbai,Chennai,Kolkata]

With StringJoiner API

With Java 8 we have java.util.StringJoiner.StringJoiner API. This does the same functionality as above but being less verbose.

String[] cities = { "Bangalore", "Delhi", "Mumbai", "Chennai", "Kolkata" };StringJoiner joiner = new StringJoiner(",", "[", "]");for (String city : cities) {
joiner.add(city);
}
System.out.println(joiner);Output:[Bangalore,Delhi,Mumbai,Chennai,Kolkata]

StringJoiner API needs three main inputs:

  1. delimiter
  2. prefix of the list (optional)
  3. suffix of the list (optional)

as indicated by its constructor:

java.util.StringJoiner.StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

StringJoiner API can be used in various contexts where list of strings needs to be concatenated.

Following examples show few of them.

  • Joining an array of strings

Class String has join() API to perform joining operation on given CharSequence or Iterable.

String[] cities = { "Bangalore", "Delhi", "Mumbai", "Chennai", "Kolkata" };List<String> list = Arrays.asList(cities);System.out.println(String.join(",", list));Output:Bangalore,Delhi,Mumbai,Chennai,Kolkata
  • Joining strings coming from stream
String[] cities = { "Bangalore", "Delhi", "Mumbai", "Chennai", "Kolkata" };List<String> list = Arrays.asList(cities);String output = list.stream().collect(Collectors.joining(",", "[", "]"));System.out.println(output);Output:[Bangalore,Delhi,Mumbai,Chennai,Kolkata]
  • Setting empty list string message

An empty list message can be set to be shown when joiner is empty.

String[] cities = {};StringJoiner joiner = new StringJoiner(",", "[", "]");joiner.setEmptyValue("EMPTY!");
for (String city : cities) {
joiner.add(city);
}
System.out.println(joiner);Output:EMPTY!
  • Merge of joiners

Given string joiner is added to the next element of the current string joiner.

StringJoiner joiner1 = new StringJoiner(",", "[", "]");
joiner1.add("A").add("B").add("C");
System.out.println(joiner1);
StringJoiner joiner2 = new StringJoiner("|", "{", "}");
joiner2.add("1").add("2").add("3");
System.out.println(joiner2);
System.out.println(joiner1.merge(joiner2));Output:[A,B,C]
{1|2|3}
[A,B,C,1|2|3]

That’s it !

--

--

Omkar Shetkar
Javarevisited

🧘‍♂️ | 👨‍👩‍👦 | 👨🏼‍💻| 🍂 | 📖 | 🇮🇳