"Cosa ne pensi, Amigo? Qual è la classe Java più popolare dopo int?"

"Mi hai già dato uno spoiler nel titolo della lezione, Ellie. È String!"

"In effetti, è uno spoiler. Stringè usato assolutamente ovunque. Ha un sacco di metodi utili che è meglio conoscere.

"La Stringclasse è l'unica classe diversa dai tipi primitivi i cui valori letterali possono essere usati in un'istruzione switch; il compilatore gestisce l'addizione di stringhe e gli oggetti String in un modo speciale; Stringgli oggetti sono archiviati nella memoria in un modo speciale. Fondamentalmente, la Stringclasse è molto classe speciale.

"Inoltre, la Stringclasse ha una serie di classi di supporto il cui scopo è semplificare ulteriormente il lavoro con le stringhe in Java. Quando imparerai tutto questo, molte cose diventeranno davvero molto più facili da fare per te."

"Non vedo l'ora."

"Bene, inizieremo proprio dal nucleo di questo ecosistema: l'organizzazione della Stringclasse. La struttura della Stringclasse è in realtà molto semplice: al suo interno c'è un array di caratteri ( chararray) che memorizza tutti i caratteri della stringa. Per esempio, ecco come viene memorizzata la parola 'Ciao':

Struttura della classe String

È importante.

In realtà, questo non è del tutto esatto. Poiché la Stringclasse è molto importante, utilizza molte ottimizzazioni e i dati vengono archiviati internamente non come array di caratteri, ma semplicemente come array di byte.

Metodi della classe String

La Stringclasse ha molti metodi: ha solo 18 costruttori! Quindi, di seguito elencherò solo quelli più frequentemente utilizzati:

Metodi Descrizione
int length()
Restituisce il numero di caratteri nella stringa
boolean isEmpty()
Controlla se la stringa è una stringa vuota
boolean isBlank()
Verifica che la stringa contenga solo spazi bianchi: spazio, tabulazione, nuova riga, ecc.
char charAt(int index)
Restituisce il carattere nella posizione di indice nella stringa.
char[] toCharArray()
Restituisce un array dei caratteri (una copia) che compongono la stringa
byte[] getBytes()
Converte una stringa in un set di byte e restituisce la matrice di byte.
String[] split(String regex)
Divide una stringa in più sottostringhe.
String join(CharSequence delimiter, elements)
Unisce più sottostringhe insieme
String intern()
Inserisce una stringa nel pool di stringhe.

"Sembra molto buono!"

"Scriviamo un programma che converte il percorso di un file dallo stile Unix allo stile Windows. Unix usa il /carattere per separare le cartelle, mentre Windows usa il \carattere.

Soluzione 1. Utilizzo di un chararray

Codice Appunti
Scanner console = new Scanner(System.in);
String path = console.nextLine();

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Creare un oggetto Scanner
Leggere una riga dalla console

Convertire una stringa in un array di caratteri
Passare sui caratteri
Se il carattere è /,
sostituirlo con \. Non dimenticare di scappare.

Crea una nuova stringa basata sull'array di caratteri.
Visualizza la stringa.

Soluzione 2. Utilizzando i metodi split()e join():

Codice Appunti
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
Creare un oggetto Scanner
Leggere una riga dalla console

Convertire string in un array di stringhe . Il /carattere viene utilizzato come separatore (le due barre in più sono il risultato di un doppio escape).
Concatenare tutte le stringhe nell'array di stringhe . Il \è usato come separatore (lo vediamo sfuggito).

Visualizza la stringa.

Soluzione 3. Utilizzando il replace(char oldChar, char newChar)metodo:

Codice Appunti
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String result = path.replace('/', '\\');

System.out.println(result);
Crea un oggetto Scanner
Leggi una riga dalla console

Sostituisci semplicemente un carattere con un altro
(il secondo è sfuggito)
Visualizza la stringa.

"Mi è piaciuta di più la terza soluzione. Ma mi eserciterò con tutte e tre."

"Ben fatto, Amigo. Vedo che sei già impaziente di mettere in pratica le tue nuove conoscenze. La lezione è finita."