Un frammento di lezione con un mentore come parte del corso Codegym University. Iscriviti al corso completo.


1 Confronto di stringhe

Una delle operazioni più comuni con le stringhe è il confronto. La classe String ha oltre dieci diversi metodi utilizzati per confrontare una stringa con un'altra stringa. Di seguito daremo un'occhiata a 8 dei principali.

Metodi Descrizione
boolean equals(String str)
Le stringhe sono considerate uguali se tutti i loro caratteri corrispondono.
boolean equalsIgnoreCase(String str)
Confronta le stringhe, ignorando il caso delle lettere (ignora se sono maiuscole o minuscole)
int compareTo(String str)
Confronta le stringhe, restituisce il numero di caratteri corrispondenti dall'inizio della stringa.
public int compareToIgnoreCase(String str)
Restituisce il numero di caratteri corrispondenti dall'inizio di una stringa, ignora maiuscole e minuscole
boolean regionMatches(int toffset, String str, int offset, int len)
Confronta parti di stringhe
boolean startsWith(String prefix)
Controlla se la stringa corrente inizia con la stringaprefix
boolean endsWith(String suffix)
Controlla se la stringa corrente termina con la stringasuffix

Supponiamo che tu voglia scrivere un programma che chieda all'utente il percorso di un file e quindi controlli il tipo di file in base alla sua estensione. Il codice di un tale programma potrebbe essere simile a questo:

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

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Creare un Scanneroggetto
Leggere una riga dalla console

Verificare se la stringa pathtermina con la stringa data


2 Ricerca di sottostringhe

Dopo aver confrontato le stringhe, la seconda operazione più popolare è trovare una stringa all'interno di un'altra. La classe String ha anche alcuni metodi per questo:

Metodi Descrizione
int indexOf(String str)
Cerca la stringa strnella stringa corrente. Restituisce l'indice del primo carattere della prima occorrenza.
int indexOf(String str, int index)
Cerca la stringa strnella stringa corrente, saltando i primi indexcaratteri. Restituisce l'indice dell'occorrenza.
int lastIndexOf(String str)
Cerca la stringa strnella stringa corrente, a partire dalla fine. Restituisce l'indice della prima occorrenza.
int lastIndexOf(String str, int index)
Cerca la stringa strnella stringa corrente dalla fine, saltando i primi indexcaratteri.
boolean matches(String regex)
Controlla se la stringa corrente corrisponde a un modello specificato da un'espressione regolare.

I metodi indexOf(String)e indexOf(String, index)sono spesso usati in combinazione. Il primo metodo consente di trovare la prima occorrenza della sottostringa passata nella stringa corrente. E il secondo metodo ti consente di trovare la seconda, terza, ecc. occorrenze saltando i primi caratteri di indice.

Supponiamo di avere un URL come " https://domain.com/about/reviews " e di voler sostituire il nome del dominio con " codegym.cc ". Gli URL possono avere tutti i tipi di nomi di dominio diversi, ma sappiamo quanto segue:

  • Il nome di dominio è preceduto da due barre — "//"
  • Il nome di dominio è seguito da una singola barra — " /"

Ecco come sarebbe il codice per un programma del genere:

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

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Crea un oggetto Scanner
Leggi una riga dalla console

Ottieni l'indice della prima occorrenza della stringa " //"
Otteniamo l'indice della prima occorrenza della stringa /, ma ci occupiamo solo di un'occorrenza dei caratteri //.
Otteniamo la stringa dall'inizio alla fine dei caratteri //
Otteniamo la stringa /dalla fine.

Concateniamo le stringhe e il nuovo dominio.

I metodi lastIndexOf(String)e lastIndexOf(String, index)funzionano allo stesso modo, solo la ricerca viene eseguita dalla fine della stringa all'inizio.



3 Creazione di sottostringhe

Un frammento di lezione con un mentore come parte del corso Codegym University. Iscriviti al corso completo.


Oltre a confrontare stringhe e trovare sottostringhe, c'è un'altra azione molto popolare: ottenere una sottostringa da una stringa. Come accade, l'esempio precedente ti ha mostrato una substring()chiamata al metodo che ha restituito parte di una stringa.

Ecco un elenco di 8 metodi che restituiscono sottostringhe dalla stringa corrente:

Metodi Descrizione
String substring(int beginIndex, int endIndex)
Restituisce la sottostringa specificata dall'intervallo di indici beginIndex..endIndex.
String repeat(int count)
Ripete la stringa corrente n volte
String replace(char oldChar, char newChar)
Restituisce una nuova stringa: sostituisce il carattere oldCharcon il caratterenewChar
String replaceFirst(String regex, String replacement)
Sostituisce la prima sottostringa, specificata da un'espressione regolare, nella stringa corrente.
public String replaceAll(String regex, String replacement)
Sostituisce tutte le sottostringhe nella stringa corrente che corrispondono all'espressione regolare.
String toLowerCase()
Converte la stringa in lettere minuscole
String toUpperCase()
Converte la stringa in maiuscolo
String trim()
Rimuove tutti gli spazi all'inizio e alla fine di una stringa

Ecco un riepilogo dei metodi disponibili:

substring(int beginIndex, int endIndex)metodo

Il substringmetodo restituisce una nuova stringa costituita da caratteri nella stringa corrente, a partire dal carattere con indice beginIndexe terminando con endIndex. Come per tutti gli intervalli in Java, il carattere con indice endIndexnon è incluso nell'intervallo. Esempi:

Codice Risultato
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Se il endIndexparametro non è specificato (il che è possibile), la sottostringa viene presa dal carattere in beginIndex fino alla fine della stringa.

repeat(int n)metodo

Il metodo di ripetizione ripete semplicemente i ntempi della stringa corrente. Esempio:

Codice Risultato
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)metodo

Il replace()metodo restituisce una nuova stringa in cui tutti i caratteri oldCharvengono sostituiti con il carattere newChar. Questo non cambia la lunghezza della stringa. Esempio:

Codice Risultato
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()e replaceAll()metodi

Il replaceAll()metodo sostituisce tutte le occorrenze di una sottostringa con un'altra. Il replaceFirst()metodo sostituisce la prima occorrenza della sottostringa passata con la sottostringa specificata. La stringa da sostituire è specificata da un'espressione regolare. Approfondiremo le espressioni regolari nella ricerca Java Multithreading .

Esempi:

Codice Risultato
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()metodi

Abbiamo imparato a conoscere questi metodi quando abbiamo imparato a chiamare i metodi della Stringclasse.

trim()metodo

Il trim()metodo rimuove gli spazi iniziali e finali da una stringa. Non tocca gli spazi all'interno di una stringa (cioè non all'inizio o alla fine). Esempi:

Codice Risultato
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"