Existe algum método interno em Java que nos permita converter String separada por vírgula em algum contêiner (por exemplo, matriz, Lista ou Vetor)? Ou preciso escrever um código personalizado para isso?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
java
string
collections
split
Jame
fonte
fonte
Respostas:
Converter String separada por vírgula em Lista
O código acima divide a string em um delimitador definido como:
zero or more whitespace, a literal comma, zero or more whitespace
que colocará as palavras na lista e recolherá qualquer espaço em branco entre as palavras e vírgulas.Observe que isso retorna simplesmente um invólucro em uma matriz: você não pode, por exemplo, a
.remove()
partir do resultadoList
. Para um real,ArrayList
você deve usar ainda maisnew ArrayList<String>
.fonte
\s
corresponde a qualquer espaço em branco,*
aplica a correspondência zero ou mais vezes. Então,\s*
significa "corresponder a qualquer espaço em branco zero ou mais vezes". Procuramos isso antes e depois da vírgula. Portanto, a divisão irá trabalhar para strings como"item1 , item2 , item3"
, ou"item1,item2 ,item3"
, etc. Em Java, você precisa escapar a barra invertida em cordas, de modo a obter\\s*
"[\\s,]+"
para aparar espaços em branco para valores. Por exemplo," item1 , item2 , item3 , "
torna-se["item1", "item2", "item3"]
."[\\s,]+"
também dividirá no espaço interno dentro de um token separado por vírgula, tratará o espaço em branco como um delimitador, mesmo quando uma vírgula não estiver presente, em vez de uma vírgula mais qualquer número de espaço em branco circundante."\\s*(,\\s*)+"
aparará o espaço em branco somente em torno de tokens separados por vírgula e também ignorará quaisquer cadeias de caracteres que estejam apenas em branco ou em branco.Arrays.asList
retorna um tamanho fixoList
apoiado pela matriz. Se você quiser um mutável normal,java.util.ArrayList
precisará fazer o seguinte:Ou, usando o Goiaba :
O uso de a
Splitter
fornece mais flexibilidade na maneira como você divide a string e permite, por exemplo, pular strings vazias nos resultados e aparar os resultados. Ele também tem um comportamento menos estranho doString.split
que não exige a divisão por regex (essa é apenas uma opção).fonte
Arrays.asList
forneça um wrapper em torno da matriz nativa (evitando uma cópia do elemento), elenew ArrayList(...)
fará exatamente esse elemento por cópia do elemento. Provavelmente, devemos preferir uma abordagem que permita que os elementos analisados sejam adicionados diretamente à coleção de destino desejada.Dois passos:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
fonte
split
é interpretado como um RegEx.Aqui está outro para converter CSV em ArrayList:
Imprime você
fonte
Se a
List
é o objetivo final, como o OP afirmou, a resposta já aceita ainda é a mais curta e a melhor. No entanto, desejo fornecer alternativas usando o Java 8 Streams , que lhe trarão mais benefícios se fizer parte de um pipeline para processamento adicional.Envolvendo o resultado da função .split (uma matriz nativa) em um fluxo e convertendo-o em uma lista.
Se for importante que o resultado seja armazenado conforme
ArrayList
o título do OP, você pode usar umCollector
método diferente :Ou usando a API de análise RegEx:
Observe que você ainda pode considerar deixar a
list
variável digitada como emList<String>
vez deArrayList<String>
. A interface genérica paraList
ainda parece bastante semelhante àArrayList
implementação.Sozinhos, esses exemplos de código parecem não adicionar muito (exceto mais digitação), mas se você planeja fazer mais, como a resposta da conversão de uma String para uma lista de longos , a API de streaming é realmente poderosa ao permitir para canalizar suas operações uma após a outra.
Por uma questão de integridade, você sabe.
fonte
fonte
collect(toList())
paracollect(Collectors.toList()
collect(toList())
está usando a importação estáticaCollectors.toList()
para a brevidade e fluência :)Não existe um método interno para isso, mas você pode simplesmente usar o método split ().
fonte
Isso deve funcionar para você.
fonte
você pode combinar asList e dividir
fonte
Este código ajudará,
fonte
Você pode usar o Guava para dividir a sequência e convertê-la em um ArrayList. Isso funciona com uma string vazia também e retorna uma lista vazia.
gera o seguinte:
fonte
Um exemplo usando
Collections
.fonte
Existem várias maneiras de resolver isso usando fluxos no Java 8, mas na IMO os seguintes liners são simples:
fonte
Você pode primeiro dividi-los usando
String.split(",")
, e depois converter a string retornadaarray
para umaArrayList
utilizaçãoArrays.asList(array)
fonte
No groovy, você pode usar o método tokenize (Character Token):
fonte
O mesmo resultado que você pode obter usando a classe Splitter.
(escrito em kotlin)
fonte
fonte
Eu costumo usar padrão pré-compilado para a lista. E isso também é um pouco mais universal, pois pode considerar colchetes que seguem algumas das expressões listToString.
fonte
No Kotlin, se a sua lista de cadeias de caracteres como esta e você pode usar para converter cadeias de caracteres em ArrayList, use esta linha de código
fonte
fonte
Você pode fazer isso da seguinte maneira.
Isso remove o espaço em branco e é dividido por vírgula, onde você não precisa se preocupar com espaços em branco.
fonte
String -> Conversão de coleção : (String -> String [] -> Collection)
Conversão Collection -> String [] :
Conversão String -> String [] :
E coleção -> coleção :
fonte
converter coleção em string como vírgula separada em Java 8
O objeto listOfString contém elementos ["A", "B", "C", "D"] -
A saída é: - 'A', 'B', 'C', 'D'
E converter matriz de seqüências de caracteres em lista no Java 8
fonte
fonte
ArrayList
? Você leu a pergunta?ArrayList
. Voltei as edições para a primeira revisão (para que você possa vê-la) e aprimorei a formatação da primeira revisão.