January
12th,
2016
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:
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);