Conversioni da matrice a stringa

1. Panoramica

In questo breve tutorial, esamineremo la conversione di un array di stringhe o numeri interi in una stringa e viceversa.

Possiamo ottenere questo risultato con Java vanilla e classi di utilità Java da librerie di uso comune.

2. Converti array in stringa

A volte è necessario convertire un array di stringhe o numeri interi in una stringa, ma sfortunatamente non esiste un metodo diretto per eseguire questa conversione.

L'implementazione predefinita del metodo toString () su un array restituisce qualcosa di simile a Ljava.lang.String; @ 74a10858 che ci informa solo sul tipo di oggetto e sul codice hash.

Tuttavia, la classe di utilità java.util.Arrays supporta la manipolazione di array e stringhe, incluso un metodo toString () per gli array.

Arrays.toString () restituisce una stringa con il contenuto dell'array di input. La nuova stringa creata è un elenco delimitato da virgole di elementi dell'array, racchiuso tra parentesi quadre ("[]"):

String[] strArray = { "one", "two", "three" }; String joinedString = Arrays.toString(strArray); assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 }; joinedString = Arrays.toString(intArray); assertEquals("[1, 2, 3, 4, 5]", joinedString);

E, sebbene sia fantastico che il metodo Arrays.toString (int []) esegua questo compito così bene per noi, confrontiamolo con metodi diversi che possiamo implementare da soli.

2.1. StringBuilder.append ()

Per iniziare, diamo un'occhiata a come eseguire questa conversione con StringBuilder.append () :

String[] strArray = { "Convert", "Array", "With", "Java" }; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < strArray.length; i++) { stringBuilder.append(strArray[i]); } String joinedString = stringBuilder.toString(); assertEquals("ConvertArrayWithJava", joinedString);

Inoltre, per convertire un array di interi, possiamo usare lo stesso approccio ma invece chiamare Integer.valueOf (intArray [i]) quando aggiungiamo al nostro StringBuilder .

2.2. API Java Streams

Java 8 e versioni successive offrono il metodo String.join () che produce una nuova stringa unendo elementi e separandoli con il delimitatore specificato, nel nostro caso solo una stringa vuota:

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" }); assertEquals("ConvertWithJavaStreams", joinedString);

Inoltre, possiamo utilizzare il metodo Collectors.joining () dall'API Java Streams che unisce le stringhe dal flusso nello stesso ordine del suo array di origine:

String joinedString = Arrays .stream(new String[]{ "Convert", "With", "Java", "Streams" }) .collect(Collectors.joining()); assertEquals("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join ()

E Apache Commons Lang non deve mai essere lasciato fuori da compiti come questi.

La classe StringUtils ha diversi metodi StringUtils.join () che possono essere utilizzati per modificare un array di stringhe in una singola stringa:

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" }); assertEquals("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join ()

E per non essere da meno, Guava accoglie lo stesso con la sua classe Falegname . La classe Joiner offre un'API fluente e fornisce una manciata di metodi di supporto per unire i dati.

Ad esempio, possiamo aggiungere un delimitatore o saltare i valori nulli:

String joinedString = Joiner.on("") .skipNulls() .join(new String[]{ "Convert", "With", "Guava", null }); assertEquals("ConvertWithGuava", joinedString);

3. Converti stringa in array di stringhe

Allo stesso modo, a volte abbiamo bisogno di dividere una stringa in un array che contiene un sottoinsieme di stringhe di input divise dal delimitatore specificato, vediamo come possiamo farlo anche noi.

3.1. String.split ()

In primo luogo, iniziamo dividendo lo spazio vuoto utilizzando il metodo String.split () senza delimitatore:

String[] strArray = "loremipsum".split("");

Che produce:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split ()

In secondo luogo, esaminiamo di nuovo la classe StringUtils dalla libreria Commons Lang di Apache.

Tra i molti metodi null-safe sugli oggetti stringa, possiamo trovare StringUtils.split (). Per impostazione predefinita, assume un delimitatore di spazio bianco:

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

Che si traduce in:

["lorem", "ipsum", "dolor", "sit", "amet"]

Ma possiamo anche fornire un delimitatore se vogliamo.

3.3. Splitter.split ()

Infine, possiamo anche usare Guava con la sua API fluente Splitter :

List resultList = Splitter.on(' ') .trimResults() .omitEmptyStrings() .splitToList("lorem ipsum dolor sit amet"); String[] strArray = resultList.toArray(new String[0]);

Che genera:

["lorem", "ipsum", "dolor", "sit", "amet"]

4. Conclusione

In questo articolo, abbiamo illustrato come convertire un array in una stringa e viceversa utilizzando Java core e le popolari librerie di utilità.

Ovviamente, l'implementazione di tutti questi esempi e frammenti di codice può essere trovata su GitHub.