JavaScript tiene Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
¿Java tiene algo como esto? Sé que puedo improvisar algo con StringBuilder:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
... pero no tiene sentido hacerlo si algo así ya forma parte del JDK.
String.join()
método. Eche un vistazo a esta respuesta si está utilizando Java 8 (o más reciente) stackoverflow.com/a/22577565/1115554Respuestas:
Con Java 8 puede hacer esto sin ninguna biblioteca de terceros.
Si desea unirse a una Colección de cadenas, puede usar el nuevo método String.join () :
Si tiene una colección con otro tipo que no sea String, puede usar la API Stream con el recopilador de unión :
La
StringJoiner
clase también puede ser útil.fuente
assertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
[a, b, c]
incluir las llaves.Iterable<CharSequence>
; Relación de interfaz:Iterable -> Collection -> List
Todas las referencias a Apache Commons están bien (y eso es lo que usa la mayoría de la gente), pero creo que el equivalente de Guava , Joiner , tiene una API mucho mejor.
Puede hacer el caso de unión simple con
pero también lidiar fácilmente con nulos:
o
y (lo suficientemente útil en lo que a mí respecta para usarlo en lugar de commons-lang), la capacidad de manejar Mapas:
que es extremadamente útil para depurar, etc.
fuente
.useForLastSeparator()
método similar? De esa manera, podría obtener algo como "y" entre solo los dos últimos elementos (con "," para el resto).separator
(que esfinal
). Todo lo que he visto en Guava, donde solía usar un equivalente de Apache Commons, ha sido mucho mejor (léase: más limpio, más rápido, más seguro y más robusto en general) en Guava con menos fallas en los bordes y problemas de seguridad de roscas y menor huella de memoria. Su director rector de "la mejor manera posible" parece ser cierto hasta ahora.String.join()
método y unaStringJoiner
clase.No está listo para usar, pero muchas bibliotecas tienen similares:
Lang Comunes:
Primavera:
fuente
En Android puedes usar la clase TextUtils .
fuente
String.join
requiere un nivel mínimo de API 26 en Android.No, no existe tal método de conveniencia en la API estándar de Java.
No es sorprendente que Apache Commons proporcione tal cosa en su clase StringUtils en caso de que no quiera escribirlo usted mismo.
fuente
isEmpty()
método en lugar de un método (estático)join()
enString
...: rollseyes: :)Tres posibilidades en Java 8:
fuente
Con un colector java 8, esto se puede hacer con el siguiente código:
Además, la solución más simple en Java 8:
o
fuente
Escribí este (lo uso para beans y exploit
toString
, así que no escribasCollection<String>
):pero
Collection
no es compatible con JSP, así que para TLD escribí:y poner a
.tld
archivo:y usarlo en archivos JSP como:
fuente
Collection<>
aIterable<>
?El código que tiene es la forma correcta de hacerlo si desea hacerlo utilizando JDK sin ninguna biblioteca externa. No hay un simple "one-liner" que pueda usar en JDK.
Si puede usar libs externas, le recomiendo que busque en la clase org.apache.commons.lang.StringUtils en la biblioteca Apache Commons.
Un ejemplo de uso:
fuente
Una forma ortodoxa de lograrlo es definiendo una nueva función:
Muestra:
Salida:
fuente
separator
Sería mucho más sugerente.Solución Java 8 con
java.util.StringJoiner
Java 8 tiene una
StringJoiner
clase. Pero aún necesita escribir un poco de repetitivo, porque es Java.fuente
Puede usar la biblioteca apache commons que tiene una clase StringUtils y un método de combinación.
Consulte este enlace: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
Tenga en cuenta que el enlace anterior puede volverse obsoleto con el tiempo, en cuyo caso puede buscar "apache commons StringUtils" en la web, lo que debería permitirle encontrar la última referencia.
(referenciado desde este hilo) Equivalentes Java de C # String.Format () y String.Join ()
fuente
Puedes hacerlo:
O una línea (solo cuando no desea '[' y ']')
Espero que esto ayude.
fuente
Una forma divertida de hacerlo con JDK puro, en una sola línea de servicio:
Salida:
¡Una forma no demasiado perfecta ni demasiado divertida!
Salida:
fuente
Es posible que desee probar el método de combinación Apache Commons StringUtils:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)
He descubierto que Apache StringUtils recoge la holgura de jdk ;-)
fuente
Si está utilizando Eclipse Collections (anteriormente GS Collections ), puede utilizar el
makeString()
método.Si puede convertirlo
List
a un tipo de Colecciones Eclipse, puede deshacerse del adaptador.Si solo desea una cadena separada por comas, puede usar la versión de
makeString()
que no toma parámetros.Nota: Soy un committer para Eclipse Collections.
fuente
Con java 1.8 se puede usar stream,
fuente
EDITAR
También noto el
toString()
problema de implementación subyacente y sobre el elemento que contiene el separador, pero pensé que estaba siendo paranoico.Como tengo dos comentarios al respecto, estoy cambiando mi respuesta a:
Que se parece bastante a la pregunta original.
Entonces, si no tiene ganas de agregar todo el jar a su proyecto, puede usar esto.
Creo que no hay nada malo con tu código original. En realidad, la alternativa que todo el mundo sugiere se ve casi igual (aunque hace varias validaciones adicionales)
Aquí está, junto con la licencia Apache 2.0.
Ahora lo sabemos, gracias código abierto
fuente
", "
?La API de guayaba de Google también tiene .join (), aunque (como debería ser obvio con las otras respuestas), Apache Commons es más o menos el estándar aquí.
fuente
Java 8 trae el
método, que es nulo seguro mediante el uso
prefix + suffix
de valores nulos.Se puede usar de la siguiente manera:
El
Collectors.joining(CharSequence delimiter)
método solo llamajoining(delimiter, "", "")
internamente.fuente
Puede usar esto desde StringUtils de Spring Framework. Sé que ya se ha mencionado, pero en realidad puedes tomar este código y funciona de inmediato, sin necesidad de Spring.
fuente
Prueba esto:
fuente