Dividir uma String em Java
1. Introdução
DividirStrings é uma operação muito frequente; este tutorial rápido concentra-se em algumas das APIs que podemos usar para fazer isso simplesmente em Java.
2. String.split()
Vamos começar com a biblioteca central - a própria classeString oferece um métodosplit() - que é muito conveniente e suficiente para a maioria dos cenários. Ele simplesmente divide oString fornecido com base no delimitador, retornando uma matriz deStrings.
Vejamos alguns exemplos. Começaremos dividindo por vírgula:
String[] splitted = "peter,james,thomas".split(",");
Vamos dividir por um espaço em branco:
String[] splitted = "car jeep scooter".split(" ");
Vamos também dividir por um ponto:
String[] splitted = "192.168.1.178".split("\\.")
Agora vamos dividir por vários caracteres - uma vírgula, espaço e hífen por meio de regex:
String[] splitted = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*"));
3. StringUtils.split()
O pacote de linguagem comum do Apache fornece uma classeStringUtils - que contém um métodosplit() seguro para nulos, que se divide usando um espaço em branco como delimitador padrão:
String[] splitted = StringUtils.split("car jeep scooter");
Além disso, ignora espaços extras:
String[] splitted = StringUtils.split("car jeep scooter");
4. Splitter.split()
Finalmente, há também uma ótimaSplitter API fluente no Guava:
List resultList = Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList("car,jeep,, scooter");
5. Dividir e cortar
Às vezes, um determinadoString contém alguns espaços à esquerda, à direita ou extras ao redor do delimitador. Vamos ver como podemos lidar com a divisão da entrada e o corte dos resultados de uma vez.
Digamos que temos isso como uma entrada:
String input = " car , jeep, scooter ";
Para remover espaços extras antes e / ou depois do delimitador, podemos executar a divisão e o recorte usando o regex:
String[] splitted = input.trim().split("\\s*,\\s*");
Aqui, o métodotrim() remove os espaços à esquerda e à direita na string de entrada e a própria regex trata os espaços extras ao redor do delimitador.
Podemos obter o mesmo resultado usando os recursos do Java 8Stream:
String[] splitted = Arrays.stream(input.split(","))
.map(String::trim)
.toArray(String[]::new);
6. Conclusão
String.split() geralmente é suficiente. No entanto, para casos mais complexos, podemos utilizar a classeStringUtils baseada em linguagem comum do Apache ou as APIs Guava limpas e flexíveis.
E, como sempre, o código do artigo está disponívelover on GitHub.