Java: ¿hay una función incorporada para concatenar las cadenas en una cadena []?

StackOverflow https://stackoverflow.com/questions/1810954

  •  06-07-2019
  •  | 
  •  

Pregunta

¿O una mejor manera que esto?

String concat(String[] strings) {
  StringBuilder out = new StringBuilder();

  for(String next: strings) {
    out.append(next);
  }

  return out.toString();
}

No te preocupes si no, ¿siento que debería haber una incorporada?

¿Fue útil?

Solución

No, no en la biblioteca de Java actual.

En JDK7 deberías poder escribir String.join (" " ;, cadenas) . Se encontró que " 85% " Uno de los usos para querer un índice en el elegante bucle for fue hacer una unión de cadena (que de todos modos puede prescindir).

Supongo que si quieres ser súper eficiente, podrías escribirlo como algo así como:

public static String concat(String... strs) {
    int size = 0;
    for (String str : strs) {
        size += str.length;
    }

    final char[] cs = new char[size];
    int off = 0;
    try {
        for (String str : strs) {
            int len = str.length();
            str.getChars(0, len, cs, off);
            off += len;
        }
    } catch (ArrayIndexOutOfBoundsException exc) {
        throw new ConcurrentModificationException(exc);
    }
    if (off != cs.length) {
        throw new ConcurrentModificationException();
    }
    return new String(cs);
}

(No compilado ni probado, por supuesto).

Otros consejos

Eche un vistazo a las nuevas bibliotecas de Guava de Google , que incorporarán Google Collections una vez que pasa de 1.0RC4 a 1.0. La guayaba y las colecciones le brindan bastante poder y elegancia, y ya se utilizan ampliamente en el código de producción de Google.

El Joiner La clase se adapta perfectamente a tu ejemplo:

String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);

Aleksander Stensby tiene una buena exploración de cuatro partes de Guava / Colecciones.

Al igual que las colecciones Apache, no forma parte del JDK, aunque se construye con mucho cuidado sobre java.util.collection.

org.apache.commons.lang.StringUtils.join

Segunda recomendación para mirar Google Guava.

Las colecciones de Google se lanzaron la semana pasada, y esta semana, Guava se lanzó para las pruebas. El contenido de Google Collections es sólido y la API no cambiará. Prefiero las colecciones de Google sobre las de apache, específicamente porque es totalmente genérico. Los usuarios de Google también afirman que es lo suficientemente rápido como para que lo usen en la producción, lo cual es bastante impresionante, aunque no puedo verificarlo personalmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top