While working in a Java app, I recently needed to assemble a comma-delimited list of values to pass to another web service without knowing how many elements there would be in advance. The best I could come up with off the top of my head was something like this:
public String appendWithDelimiter( String original, String addition, String delimiter ) { if ( original.equals( '' ) ) { return addition; } else { return original + delimiter + addition; } } String parameterString = ''; if ( condition ) parameterString = appendWithDelimiter( parameterString, 'elementName', ',' ); if ( anotherCondition ) parameterString = appendWithDelimiter( parameterString, 'anotherElementName', ',' );
I realize this isn’t particularly efficient, since there are strings being created all over the place, but I was going for clarity more than optimization.
In Ruby, I can do something like this instead, which feels much more elegant:
parameterArray = []; parameterArray << 'elementName' if condition; parameterArray << 'anotherElementName' if anotherCondition; parameterString = parameterArray.join(',');
But since Java lacks a join command, I couldn’t figure out anything equivalent.
So, what’s the best way to do this 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
StringJoinerandString.join(). The snippets below show how you can use them:StringJoinerString.join(CharSequence delimiter, CharSequence... elements))String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)