Crear un String de elementos separados por comas son unas de las operaciones que nunca faltan en nuestro código. Por lo general tenemos como fuente una lista o array de valores para realizar esto.

Aún veo código como el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
List<String> lista = new ArrayList<String>();
lista.add("UNO");
lista.add("DOS");
lista.add("TRES");
lista.add("CUATRO");

StringBuilder sb = new StringBuilder();
for (String s : lista) {
    sb.append(s).append(",");
}

sb.deleteCharAt(sb.length() -1);

System.out.println(sb.toString());


Nuestro resultado evidentemente cumple con el objetivo:

UNO,DOS,TRES,CUATRO


Aunque considero que esa última línea sb.deleteCharAt(sb.length() -1) esta demás si usamos otro enfoque que no use código fuera del loop.


Opcion 1 : Antes de Java 8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
List<String> lista = new ArrayList<>();
lista.add("UNO");
lista.add("DOS");
lista.add("TRES");
lista.add("CUATRO");

StringBuilder sb = new StringBuilder();
Iterator<String> it = lista.iterator();
while(it.hasNext()) {
    sb.append(it.next());
    if (it.hasNext()) sb.append(","); //la parte interesante
}

System.out.println(sb.toString());


Opcion 2 : Usando Java 8

Desde la versión 8 la clase String trae el método join().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
List<String> lista = new ArrayList<>();
lista.add("UNO");
lista.add("DOS");
lista.add("TRES");
lista.add("CUATRO");

//Puede recibir la misma lista si es de Strings
String result1 = String.join(",", lista);
System.out.println(result1);

//O puede recibir un array de String
String[] stringArray = lista.toArray(new String[]{});
String result2 = String.join(",", stringArray);
System.out.println(result2);


Opcion 3 : Usando Java 8

Usamos la clase StringJoiner para este trabajo.

1
2
3
4
5
6
7
8
9
10
11
List<String> lista = new ArrayList<>();
lista.add("UNO");
lista.add("DOS");
lista.add("TRES");
lista.add("CUATRO");

StringJoiner joiner = new StringJoiner(",");
for (String s : lista) {
    joiner.add(s);
}
System.out.println(joiner.toString());


Opcion 4 : Usando una librería

Existen multiples librerías que nos ayudan en esto. Una de esas es common-lang con la clase org.apache.commons.lang.StringUtils:

1
2
3
4
5
6
7
8
9
List<String> lista = new ArrayList<>();
lista.add("UNO");
lista.add("DOS");
lista.add("TRES");
lista.add("CUATRO");

String result = StringUtils.join(lista, ',');

System.out.println(result);


También SpringFramework nos proporciona la clase org.springframework.util.StringUtils:

1
2
3
4
5
6
7
8
9
List<String> lista = new ArrayList<>();
lista.add("UNO");
lista.add("DOS");
lista.add("TRES");
lista.add("CUATRO");

String result = StringUtils.collectionToCommaDelimitedString(lista);

System.out.println(result);



Franky Villadiego

Volando hacia el desarrollo productivo!