Para el beneficio de las personas que buscan esta respuesta, probablemente debería tenerse en cuenta que esto también es el equivalente de una unión Perl.
k-den
3
dice que no está definido para mí
Ninjaxor
@Ninjaxor 1. commons-lang * jar debe estar en classpath 2. import org.apache.commons.lang3.StringUtils;
peterh - Restablece a Mónica el
9
Le recomendaría que edite esta respuesta para agregar una referencia al nuevo String.join()método introducido en Java 8. De esta manera, el gran número de personas que leen esta respuesta aceptada se beneficiarán de ese conocimiento. Actualmente, la respuesta más votada que menciona este hecho se pierde bastante abajo ...
Duncan Jones
1
Vale la pena mencionar que String.join()funcionaría solo para List<CharSequence>o CharSequence[]elementos.
Esta es claramente la mejor respuesta para todas las versiones de Android, ya que Java 8 solo se lanzará en Android en un momento. Esta solución utiliza las bibliotecas de Android integradas, en lugar de estas soluciones tontas de "incluir una gran biblioteca para realizar una acción".
LukeStoneHm
Es septiembre de 2017, Java 8 para Android todavía está muy lejos. Gracias por esta respuesta!
Aenadon
57
En Java 8 puedes usar
1) Stream API:
String[] a =newString[]{"a","b","c"};String result =Arrays.stream(a).collect(Collectors.joining(", "));
Podría escribir fácilmente una función de este tipo en aproximadamente diez líneas de código:
String combine(String[] s,String glue){int k = s.length;if( k ==0){returnnull;}StringBuilderout=newStringBuilder();out.append( s[0]);for(int x=1; x < k;++x ){out.append(glue).append(s[x]);}returnout.toString();}
Buena práctica según usted ... no existe un estándar universal para tales cosas.
phoebus
24
Pero si incluyera llaves, eso habría agregado dos líneas más de código, ¡y no podría haber afirmado haberlo hecho en 11 líneas!
Jay
8
el problema es cuando después de un tiempo, o alguien más, tiene prisa, agrega otra línea a eso si / para sin agregar llaves; o eliminar return null después de if (k == 0), que en algunos casos se compilaría pero será incorrecto. Entonces es mejor sacrificar una línea extra por esa llave de cierre (la abertura puede permanecer en la misma línea si / por).
Milán
16
Creo que es increíble que, si bien la mayoría de los idiomas incorporan dicha funcionalidad en su núcleo, la comunidad Java alienta a todos a reinventar la rueda.
John Strickler
33
11 líneas? ¡Bah! ¡Puedo hacerlo en 1! Simplemente elimine todos los caracteres de nueva línea en el archivo fuente.
La biblioteca de guayaba de Google también tiene este tipo de capacidad . Puede ver el ejemplo de Cadena [] también desde la API.
Como ya se describió en la api, tenga cuidado con la inmutabilidad de los métodos de construcción.
Puede aceptar una variedad de objetos para que funcione en su caso. En mi experiencia anterior, intenté unirme a una pila que es iterable y funciona bien.
Utilice StringBuilder (no apto para subprocesos) en lugar de StringBuffer (seguro para subprocesos) para un mejor rendimiento. La interfaz es la misma.
Asaph
2
Esto parece ser de snippets.dzone.com/posts/show/91 . Los comentarios sugieren una versión muy mejorada: unión de cadena estática pública (Iterable <? Extend Object> pColl, String separator) {Iterator <? extiende Object> oIter; if (pColl == null || (! (oIter = pColl.iterator ()) .hasNext ())) return ""; StringBuilder oBuilder = new StringBuilder (String.valueOf (oIter.next ())); while (oIter.hasNext ()) oBuilder.append (separador) .append (oIter.next ()); return oBuilder.toString (); }
Quantum7
6
Si aterrizó aquí buscando una conversión rápida de matriz a cadena, pruebe Arrays.toString () .
Crea una representación de cadena del Object[]pasado. El resultado está rodeado de corchetes ( "[]"), cada elemento se convierte en una Cadena a través de String.valueOf(Object)y se separa por ", ". Si la matriz es
null, entonces "null"se devuelve.
¡MUCHAS GRACIAS! Las cadenas están separadas por "," y todo tiene "[]" alrededor, lo cual está bien para mí.
John Henckel
5
Solo por el "Tengo el más corto" desafío , aquí hay minas;)
Iterativo:
publicstaticString join(String s,Object... a){StringBuilder o =newStringBuilder();for(Iterator<Object> i =Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext()? s :"");return o.toString();}
¿Te gusta mi forma de 3 líneas usando solo los métodos de la clase String?
staticStringjoin(String glue,String[] array){String line ="";for(String s : array) line += s + glue;return(array.length ==0)? line : line.substring(0, line.length()- glue.length());}
En caso de que esté usando la biblioteca funcional de Java y por alguna razón no pueda usar Streams de Java 8 (que podría ser el caso al usar el complemento Android + Retrolambda), aquí hay una solución funcional para usted:
Esto solo funciona con delimitadores de longitud 1 y requiere 'números mágicos' (aunque bastante locales) si desea un delimitador de una longitud diferente.
maiwald
Puedes agregar varios personajes mientras
agregas
que simplemente hacer: op = op.substring (0, op.length () - ",". length ()); ¿Cual es el problema?
Dennis
-3
java.util.Arrays tiene un método 'asList'. Junto con la API java.util.List / ArrayList, esto le brinda todo lo que necesita :;
privatestaticString[]join(String[] array1,String[] array2){List<String> list =newArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));return list.toArray(newString[0]);}
Respuestas:
A partir de Java8 es posible usarlo
String.join()
.Genera:
De lo contrario, Apache Commons Lang tiene una
StringUtils
clase que tiene unajoin
función que unirá matrices para crear unString
.Por ejemplo:
Genera lo siguiente
String
:fuente
String.join()
método introducido en Java 8. De esta manera, el gran número de personas que leen esta respuesta aceptada se beneficiarán de ese conocimiento. Actualmente, la respuesta más votada que menciona este hecho se pierde bastante abajo ...String.join()
funcionaría solo paraList<CharSequence>
oCharSequence[]
elementos.Si estabas buscando qué usar en Android, es:
por ejemplo:
fuente
En Java 8 puedes usar
1) Stream API:
2) nuevo método String.join: https://stackoverflow.com/a/21756398/466677
3) clase java.util.StringJoiner: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
fuente
Podría escribir fácilmente una función de este tipo en aproximadamente diez líneas de código:
fuente
Un pequeño mod en lugar de usar substring ():
fuente
.append()
dos veces para cada uno enString
lugar de concatenarlos y luego agregarlos al generador?Como con muchas preguntas últimamente, Java 8 al rescate:
Java 8 agregó un nuevo método estático al
java.lang.String
que hace exactamente lo que quieres:Utilizándolo:
Resultados en:
fuente
La biblioteca de guayaba de Google también tiene este tipo de capacidad . Puede ver el ejemplo de Cadena [] también desde la API.
Como ya se describió en la api, tenga cuidado con la inmutabilidad de los métodos de construcción.
Puede aceptar una variedad de objetos para que funcione en su caso. En mi experiencia anterior, intenté unirme a una pila que es iterable y funciona bien.
Muestra de mí:
imprime:
|i am a coder|
fuente
Dado:
Luego, como alternativa a la respuesta de Coobird, donde el pegamento es ",":
O para concatenar con una cadena diferente, como "& amp;".
Sin embargo ... este SOLO funciona si sabe que los valores en la matriz o lista NO contienen la cadena de caracteres ",".
fuente
Arrays.asList(a).toString()
trabajó para lo que quería hacerSi está utilizando Spring Framework, entonces tiene la clase StringUtils :
fuente
No en el núcleo, no. Sin embargo, la búsqueda de "java array join string glue" le dará algunos fragmentos de código sobre cómo lograr esto.
p.ej
fuente
Si aterrizó aquí buscando una conversión rápida de matriz a cadena, pruebe Arrays.toString () .
fuente
Solo por el "Tengo el más corto" desafío , aquí hay minas;)
Iterativo:
Recursivo:
fuente
copyOfRange()
").Nada incorporado que yo sepa.
Apache Commons Lang tiene una clase llamada
StringUtils
que contiene muchas funciones de combinación.fuente
Así es como lo hago.
fuente
Una alternativa similar
fuente
Mi giro
fuente
¿Te gusta mi forma de 3 líneas usando solo los métodos de la clase String?
fuente
StringBuilder
si necesita eficiencia: PPara obtener "str1, str2" de "str1", "str2", "":
También puede agregar cheque nulo adicional
fuente
En caso de que esté usando la biblioteca funcional de Java y por alguna razón no pueda usar Streams de Java 8 (que podría ser el caso al usar el complemento Android + Retrolambda), aquí hay una solución funcional para usted:
Tenga en cuenta que no es el enfoque más eficiente, pero funciona bien para listas pequeñas.
fuente
Lo hago de esta manera usando un StringBuilder:
fuente
s + delimiter
(concatenación de cadenas con el operador más) anula el propósito de usar aStringBuilder
.fuente
java.util.Arrays tiene un método 'asList'. Junto con la API java.util.List / ArrayList, esto le brinda todo lo que necesita :;
fuente