What's the best way to build a string of delimited items in Java? What's the best way to build a string of delimited items in Java? java java

What's the best way to build a string of delimited items in Java?


Pre Java 8:

Apache's commons lang is your friend here - it provides a join method very similar to the one you refer to in Ruby:

StringUtils.join(java.lang.Iterable,char)


Java 8:

Java 8 provides joining out of the box via StringJoiner and String.join(). The snippets below show how you can use them:

StringJoiner

StringJoiner joiner = new StringJoiner(",");joiner.add("01").add("02").add("03");String joinedString = joiner.toString(); // "01,02,03"

String.join(CharSequence delimiter, CharSequence... elements))

String joinedString = String.join(" - ", "04", "05", "06"); // "04 - 05 - 06"

String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

List<String> strings = new LinkedList<>();strings.add("Java");strings.add("is");strings.add("cool");String message = String.join(" ", strings);//message returned is: "Java is cool"


You could write a little join-style utility method that works on java.util.Lists

public static String join(List<String> list, String delim) {    StringBuilder sb = new StringBuilder();    String loopDelim = "";    for(String s : list) {        sb.append(loopDelim);        sb.append(s);                    loopDelim = delim;    }    return sb.toString();}

Then use it like so:

    List<String> list = new ArrayList<String>();    if( condition )        list.add("elementName");    if( anotherCondition ) list.add("anotherElementName");    join(list, ",");


In the case of Android, the StringUtils class from commons isn't available, so for this I used

android.text.TextUtils.join(CharSequence delimiter, Iterable tokens)

http://developer.android.com/reference/android/text/TextUtils.html