JavaScript tem Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Java tem algo assim? Eu sei que posso criar algo com o 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();
}
... mas não faz sentido fazer isso se algo assim já faz parte do JDK.
String.join()
método Ter um olhar para esta resposta se você estiver usando Java 8 (ou mais recente) stackoverflow.com/a/22577565/1115554Respostas:
Com o Java 8, você pode fazer isso sem nenhuma biblioteca de terceiros.
Se você deseja ingressar em uma coleção de seqüências de caracteres, pode usar o novo método String.join () :
Se você tem uma coleção com outro tipo que não String, pode usar a API do Stream com o coletor associado :
A
StringJoiner
classe também pode ser útil.fonte
assertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
[a, b, c]
incluir chaves.Iterable<CharSequence>
; Relação da interface:Iterable -> Collection -> List
Todas as referências ao Apache Commons são boas (e é isso que a maioria das pessoas usa), mas acho que o equivalente do Guava , Joiner , tem uma API muito melhor.
Você pode fazer o caso de junção simples com
mas também lida facilmente com nulos:
ou
e (útil o suficiente para usá-lo em vez de commons-lang), a capacidade de lidar com o Google Maps:
o que é extremamente útil para depuração etc.
fonte
.useForLastSeparator()
método ou outro similar? Dessa forma, você pode obter algo como "e" entre apenas os dois últimos itens (com "," nos demais).separator
(que éfinal
). Tudo o que vi no Guava, onde costumava usar um equivalente do Apache Commons, foi muito melhor (leia-se: mais limpo, mais rápido, mais seguro e apenas mais robusto em geral) no Guava, com menos falhas nas bordas e problemas de segurança de threads e menor espaço de memória. Seu principal guia "da melhor maneira possível" parece valer até agora.String.join()
método e umaStringJoiner
classe.Não fora da caixa, mas muitas bibliotecas têm similar:
Commons Lang:
Primavera:
fonte
No Android, você pode usar a classe TextUtils .
fonte
String.join
requer min api nível 26 no android.Não, não existe esse método de conveniência na API Java padrão.
Não é de surpreender que o Apache Commons forneça isso em sua classe StringUtils , caso você não queira escrevê-lo.
fonte
isEmpty()
método em vez de um (estática)join()
método emString
...: rollseyes: :)Três possibilidades no Java 8:
fonte
Com um coletor java 8, isso pode ser feito com o seguinte código:
Além disso, a solução mais simples em java 8:
ou
fonte
Eu escrevi este (eu uso para beans e exploit
toString
, então não escrevaCollection<String>
):mas
Collection
não é suportado pelo JSP, então, para o TLD, escrevi:e colocar em
.tld
arquivo:e use-o em arquivos JSP como:
fonte
Collection<>
paraIterable<>
?O código que você possui é a maneira correta de fazer isso, se você quiser usar o JDK sem nenhuma biblioteca externa. Não existe um "one-liner" simples que você possa usar no JDK.
Se você pode usar bibliotecas externas, recomendo que você analise a classe org.apache.commons.lang.StringUtils na biblioteca do Apache Commons.
Um exemplo de uso:
fonte
Uma maneira ortodoxa de alcançá-lo é definindo uma nova função:
Amostra:
Resultado:
fonte
separator
seria muito mais sugestivo.Solução Java 8 com
java.util.StringJoiner
O Java 8 tem uma
StringJoiner
classe. Mas você ainda precisa escrever um pouco de clichê, porque é Java.fonte
Você pode usar a biblioteca apache commons, que possui uma classe StringUtils e um método de junção.
Verifique este link: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
Observe que o link acima pode se tornar obsoleto ao longo do tempo; nesse caso, você pode simplesmente pesquisar na web por "apache commons StringUtils", o que deve permitir que você encontre a referência mais recente.
(referenciado neste encadeamento) Java equivalentes de C # String.Format () e String.Join ()
fonte
Você consegue fazer isso:
Ou uma linha (somente quando você não deseja '[' e ']')
Espero que isto ajude.
fonte
Uma maneira divertida de fazer isso com o JDK puro, em uma linha de serviço:
Resultado:
Uma maneira não muito perfeita e não muito divertida!
Resultado:
fonte
Você pode tentar o método de associação Apache Commons StringUtils:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)
Descobri que o Apache StringUtils pega a folga do jdk ;-)
fonte
Se você estiver usando o Eclipse Collections (anteriormente GS Collections ), poderá usar o
makeString()
métodoSe você pode converter o seu
List
em um tipo de Coleções Eclipse, poderá se livrar do adaptador.Se você quiser apenas uma sequência separada por vírgula, poderá usar a versão
makeString()
que não requer parâmetros.Nota: Sou um colaborador das Coleções Eclipse.
fonte
Com o java 1.8 stream pode ser usado,
fonte
EDITAR
Percebo também o
toString()
problema de implementação subjacente e sobre o elemento que contém o separador, mas pensei que estava sendo paranóico.Como tenho dois comentários a esse respeito, vou alterar minha resposta para:
O que parece bastante com a pergunta original.
Portanto, se você não quiser adicionar o frasco inteiro ao seu projeto, use-o.
Eu acho que não há nada errado com o seu código original. Na verdade, a alternativa sugerida por todos parece quase a mesma (embora faça várias validações adicionais)
Aqui está, junto com a licença Apache 2.0.
Agora sabemos, obrigado código aberto
fonte
", "
?A API Guava do Google também possui .join (), embora (como deve ser óbvio com as outras respostas), o Apache Commons seja praticamente o padrão aqui.
fonte
O Java 8 traz o
método, que é nulo e seguro usando
prefix + suffix
valores nulos.Pode ser usado da seguinte maneira:
O
Collectors.joining(CharSequence delimiter)
método apenas chamajoining(delimiter, "", "")
internamente.fonte
Você pode usar isso no StringUtils do Spring Framework. Eu sei que ele já foi mencionado, mas você pode simplesmente pegar esse código e ele funciona imediatamente, sem a necessidade do Spring.
fonte
Tente o seguinte:
fonte