Una forma rápida y sencilla de unir elementos de una matriz con un separador (lo opuesto a dividir) en Java [duplicado]

Resuelto Eran Medan asked hace 14 años • 15 respuestas

Ver pregunta relacionada con .NET

Estoy buscando una manera rápida y fácil de hacer exactamente lo opuesto a dividir para que se convierta ["a","b","c"]en"a,b,c"

Iterar a través de una matriz requiere agregar una condición (si este no es el último elemento, agregue el separador) o usar una subcadena para eliminar el último separador.

Estoy seguro de que existe una forma certificada y eficiente de hacerlo (¿Apache Commons?)

¿Cómo prefieres hacerlo en tus proyectos?

Eran Medan avatar Dec 30 '09 14:12 Eran Medan
Aceptado

Usando Java 8 puedes hacer esto de una manera muy limpia:

String.join(delimiter, elements);

Esto funciona de tres maneras:

1) especificando directamente los elementos

String joined1 = String.join(",", "a", "b", "c");

2) usando matrices

String[] array = new String[] { "a", "b", "c" };
String joined2 = String.join(",", array);

3) usando iterables

List<String> list = Arrays.asList(array);
String joined3 = String.join(",", list);
skiwi avatar Oct 04 '2014 17:10 skiwi

Si estás en Android puedesTextUtils.join(delimiter, tokens)

nmr avatar Jul 18 '2014 23:07 nmr

Prefiero Guava a Apache StringUtils para este problema en particular:

Joiner.on(separator).join(array)

En comparación con StringUtils, la API Joiner tiene un diseño fluido y es un poco más flexible; por ejemplo, nulllos elementos pueden omitirse o reemplazarse por un marcador de posición. Además, Joinertiene una función para unir mapas con un separador entre clave y valor.

nd. avatar Dec 30 '2009 07:12 nd.

De hecho , Apache Commons Lang tiene un StringUtils.joinmétodo que conectará Stringmatrices con un separador específico.

Por ejemplo:

String[] s = new String[] {"a", "b", "c"};
String joined = StringUtils.join(s, ",");  // "a,b,c"

Sin embargo, sospecho que, como usted menciona, debe haber algún tipo de procesamiento condicional o de subcadena en la implementación real del método mencionado anteriormente.

Si tuviera que realizar la Stringunión y no tuviera otras razones para usar Commons Lang, probablemente usaría la mía propia para reducir la cantidad de dependencias de bibliotecas externas.

coobird avatar Dec 30 '2009 07:12 coobird

Una solución rápida y sencilla sin incluir a terceros.

public static String strJoin(String[] aArr, String sSep) {
    StringBuilder sbStr = new StringBuilder();
    for (int i = 0, il = aArr.length; i < il; i++) {
        if (i > 0)
            sbStr.append(sSep);
        sbStr.append(aArr[i]);
    }
    return sbStr.toString();
}
Zedas avatar Mar 08 '2013 11:03 Zedas