Dividi una stringa in Java

1. Introduzione

La divisione delle stringhe è un'operazione molto frequente; questo breve tutorial è incentrato su alcune delle API che possiamo usare per farlo semplicemente in Java.

2. String.split ()

Cominciamo con la libreria principale - la classe String stessa offre un metodo split () - che è molto conveniente e sufficiente per la maggior parte degli scenari. Divide semplicemente la stringa data in base al delimitatore, restituendo un array di stringhe .

Vediamo alcuni esempi. Inizieremo con la divisione con una virgola:

String[] splitted = "peter,james,thomas".split(",");

Dividiamolo per uno spazio bianco:

String[] splitted = "car jeep scooter".split(" ");

Dividiamo anche da un punto:

String[] splitted = "192.168.1.178".split("\\.")

Dividiamo ora per più caratteri: una virgola, uno spazio e un trattino tramite regex:

String[] splitted = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*"));

3. StringUtils.split ()

Il pacchetto lang comune di Apache fornisce una classe StringUtils , che contiene un metodo split () null-safe , che si divide usando gli spazi bianchi come delimitatore predefinito:

String[] splitted = StringUtils.split("car jeep scooter");

Inoltre, ignora gli spazi extra:

String[] splitted = StringUtils.split("car jeep scooter");

4. Splitter.split ()

Infine, c'è anche una bella API Splitter fluente in Guava:

List resultList = Splitter.on(',') .trimResults() .omitEmptyStrings() .splitToList("car,jeep,, scooter"); 

5. Dividi e taglia

A volte una determinata stringa contiene alcuni spazi iniziali, finali o extra attorno al delimitatore. Vediamo come possiamo gestire la divisione dell'input e il taglio dei risultati in una volta sola.

Diciamo che abbiamo questo come input:

String input = " car , jeep, scooter ";

Per rimuovere spazi extra prima e / o dopo il delimitatore, possiamo eseguire la divisione e il taglio usando regex:

String[] splitted = input.trim().split("\\s*,\\s*");

Qui, il metodo trim () rimuove gli spazi iniziali e finali nella stringa di input e la regex stessa gestisce gli spazi extra attorno al delimitatore.

Possiamo ottenere lo stesso risultato utilizzando le funzionalità di Java 8 Stream :

String[] splitted = Arrays.stream(input.split(",")) .map(String::trim) .toArray(String[]::new);

6. Conclusione

String.split () è generalmente sufficiente. Tuttavia, per casi più complessi possiamo utilizzare la classe StringUtils basata su common lang di Apache o le API Guava pulite e flessibili.

E, come sempre, il codice dell'articolo è disponibile su GitHub.