Para o benefício das pessoas que buscam essa resposta, provavelmente deve-se notar que isso também é o equivalente a uma associação ao Perl.
den-k
3
ele diz que está indefinido para mim
Ninjaxor
@Ninjaxor 1. commons-lang * jar deve estar no caminho de classe 2. import org.apache.commons.lang3.StringUtils;
peterh - Restabelece Monica
9
Eu recomendo que você edite esta resposta para anexar uma referência ao novo String.join()método introduzido no Java 8. Dessa forma, o grande número de pessoas que lêem essa resposta aceita se beneficiará desse conhecimento. Atualmente, o mais votado resposta mencionar este fato é bastante perdido abaixo ...
Duncan Jones
1
Vale ressaltar que String.join()funcionaria apenas para List<CharSequence>ou CharSequence[]elementos.
Enigo
71
Se você estava procurando o que usar no Android, é:
Essa é claramente a melhor resposta para todas as versões do Android, já que o Java 8 só será lançado no Android daqui a pouco. Esta solução usa as bibliotecas Android integradas, em vez dessas soluções tolas "incluem uma enorme biblioteca para executar uma ação".
LukeStoneHm
Em setembro de 2017, o Java 8 para Android ainda está longe. Obrigado por esta resposta!
Aenadon
57
No Java 8 você pode usar
1) API de fluxo:
String[] a =newString[]{"a","b","c"};String result =Arrays.stream(a).collect(Collectors.joining(", "));
Você poderia escrever facilmente essa função em cerca de dez linhas 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();}
Boas práticas para você ... não existe um padrão universal para essas coisas.
Phoebus 04/10/09
24
Mas se eu incluísse chaves, isso acrescentaria mais duas linhas de código, e eu não poderia ter afirmado ter feito isso em 11 linhas!
Jay
8
o problema é quando você, depois de um tempo, ou outra pessoa, com pressa, adiciona outra linha àquela se / para sem adicionar chaves; ou delete return null depois de if (k == 0), que em alguns casos seria compilado, mas estará incorreto. Então é melhor sacrificar uma linha extra para essa chave de fechamento (a abertura pode permanecer na mesma se / para a linha).
milan
16
Eu acho incrível que, embora a maioria das linguagens inclua essa funcionalidade em seu núcleo, a comunidade Java incentive todos a reinventar a roda.
John Strickler
33
11 linhas? Bah! Eu posso fazer isso em 1! Simplesmente remova todos os caracteres de nova linha no arquivo de origem.
A biblioteca do Google goiaba também possui esse tipo de capacidade . Você pode ver o exemplo String [] também na API.
Como já descrito na API, tenha cuidado com a imutabilidade dos métodos do construtor.
Ele pode aceitar uma variedade de objetos para funcionar no seu caso. Na minha experiência anterior, tentei ingressar em um Stack que é iterável e funciona bem.
Use StringBuilder (não seguro para threads) no lugar de StringBuffer (seguro para threads) para obter melhor desempenho. A interface é a mesma.
Asaph
2
Parece ser de snippets.dzone.com/posts/show/91 . Os comentários sugerem uma versão muito melhorada: junção estática pública de String (Iterável <? Estende Objeto> pColl, separador de String) {Iterador <? estende Object> oIter; if (pColl == null || (! (oIter = pColl.iterator ()) .hasNext ())) return ""; StringBuilder oBuilder = novo StringBuilder (String.valueOf (oIter.next ())); while (oIter.hasNext ()) oBuilder.append (separador) .append (oIter.next ()); retornar oBuilder.toString (); }
Quantum7 17/03/10
6
Se você chegou aqui procurando uma conversão rápida de matriz para string, tente Arrays.toString () .
Cria uma representação String do Object[]passado. O resultado é cercado por colchetes ( "[]"), cada elemento é convertido em uma String por meio de String.valueOf(Object)e separado por ", ". Se a matriz for
null, então "null"será retornado.
MUITO OBRIGADO! As strings são separadas por "," e a coisa toda tem "[]" ao redor, o que é bom para mim.
John Henckel
5
Apenas para o desafio "Eu tenho o menor" , aqui estão as 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();}
Você gosta do meu caminho de 3 linhas usando apenas os métodos da classe 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());}
Caso você esteja usando a biblioteca Java Funcional e, por algum motivo, não possa usar o Streams do Java 8 (que pode ser o caso ao usar o plug-in Android + Retrolambda), aqui está uma solução funcional para você:
Isso funciona apenas com delimitadores de comprimento 1 e requer 'números mágicos' (embora bastante locais) se você quiser um delimitador de comprimento diferente.
Mai13
Você pode adicionar vários personagens enquanto anexando
Gaurav Adurkar
do que simplesmente: op = op.substring (0, op.length () - ",". length ()); qual é o grande problema?
Dennis
-3
java.util.Arrays possui um método 'asList'. Juntamente com a API java.util.List / ArrayList, você fornece tudo o que você precisa :;
privatestaticString[]join(String[] array1,String[] array2){List<String> list =newArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));return list.toArray(newString[0]);}
Respostas:
A partir do Java8 , é possível usar
String.join()
.Gera:
Caso contrário, o Apache Commons Lang tem uma
StringUtils
classe que possui umajoin
função que unirá matrizes para criar aString
.Por exemplo:
Gera o seguinte
String
:fonte
String.join()
método introduzido no Java 8. Dessa forma, o grande número de pessoas que lêem essa resposta aceita se beneficiará desse conhecimento. Atualmente, o mais votado resposta mencionar este fato é bastante perdido abaixo ...String.join()
funcionaria apenas paraList<CharSequence>
ouCharSequence[]
elementos.Se você estava procurando o que usar no Android, é:
por exemplo:
fonte
No Java 8 você pode usar
1) API de fluxo:
2) novo método String.join: https://stackoverflow.com/a/21756398/466677
3) classe java.util.StringJoiner: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
fonte
Você poderia escrever facilmente essa função em cerca de dez linhas de código:
fonte
Um pequeno mod em vez de usar substring ():
fonte
.append()
duas vezes para cada um emString
vez de concatená-las e depois anexá-las ao construtor.Como com muitas perguntas recentemente, o Java 8 para o resgate:
O Java 8 adicionou um novo método estático ao
java.lang.String
qual faz exatamente o que você deseja:Usando isso:
Resulta em:
fonte
A biblioteca do Google goiaba também possui esse tipo de capacidade . Você pode ver o exemplo String [] também na API.
Como já descrito na API, tenha cuidado com a imutabilidade dos métodos do construtor.
Ele pode aceitar uma variedade de objetos para funcionar no seu caso. Na minha experiência anterior, tentei ingressar em um Stack que é iterável e funciona bem.
Amostra de mim:
imprime:
|i am a coder|
fonte
Dado:
Então, como uma alternativa à resposta de coobird, onde a cola é ",":
Ou para concatenar com uma sequência diferente, como "& amp;".
No entanto ... este funciona SOMENTE se você souber que os valores na matriz ou na lista NÃO contêm a cadeia de caracteres ",".
fonte
Arrays.asList(a).toString()
trabalhou para o que eu queria fazerSe você estiver usando o Spring Framework , terá a classe StringUtils :
fonte
Não no núcleo, não. Uma pesquisa por "cola de cadeia de junção de matriz java" fornecerá alguns trechos de código sobre como conseguir isso.
por exemplo
fonte
Se você chegou aqui procurando uma conversão rápida de matriz para string, tente Arrays.toString () .
fonte
Apenas para o desafio "Eu tenho o menor" , aqui estão as minas;)
Iterativo:
Recursivo:
fonte
copyOfRange()
").Nada embutido que eu conheça.
O Apache Commons Lang tem uma classe chamada
StringUtils
que contém muitas funções de junção.fonte
É assim que eu faço.
fonte
Uma alternativa semelhante
fonte
Minha rotação.
fonte
Você gosta do meu caminho de 3 linhas usando apenas os métodos da classe String?
fonte
StringBuilder
se você precisar de eficiência: PPara obter "str1, str2" de "str1", "str2", "":
Além disso, você pode adicionar verificação nula extra
fonte
Caso você esteja usando a biblioteca Java Funcional e, por algum motivo, não possa usar o Streams do Java 8 (que pode ser o caso ao usar o plug-in Android + Retrolambda), aqui está uma solução funcional para você:
Observe que não é a abordagem mais eficiente, mas funciona bem para pequenas listas.
fonte
Eu faço dessa maneira usando um StringBuilder:
fonte
s + delimiter
(concatenação de cadeia de caracteres com o operador mais) anula todo o objetivo de usar aStringBuilder
.fonte
java.util.Arrays possui um método 'asList'. Juntamente com a API java.util.List / ArrayList, você fornece tudo o que você precisa :;
fonte