1. Metodo length(): quanti caratteri in una stringa?
Il metodo length() restituisce il numero di caratteri in una stringa. Non è esattamente la stessa cosa del “numero di byte” (soprattutto se nella stringa ci sono emoji o caratteri Unicode), ma per la maggior parte dei casi è proprio ciò che serve.
Esempio d’uso
String name = "Vasilisa";
int length = name.length();
System.out.println("Numero di lettere nel nome: " + length); // 8
A cosa serve
- Verificare se l’utente ha inserito una stringa vuota.
- Verificare la lunghezza minima/massima di una password.
- Sapere quanti caratteri restano fino al limite (ad esempio in un SMS o in un tweet).
Esempio: verifica della stringa vuota
String input = "";
if (input.length() == 0)
{
System.out.println("La stringa è vuota!");
}
Suggerimento: per verificare se una stringa è vuota esiste anche il metodo isEmpty(), ma ne parleremo tra poco.
FAQ rapido
- Il metodo length() non accetta argomenti (le parentesi sono sempre vuote).
- Se la stringa è composta da spazi, anche questi sono contati come caratteri!
- Se la stringa è null, la chiamata a length() genererà NullPointerException — controlla prima che non sia null.
2. Metodo substring(): estraiamo una parte della stringa
Il metodo substring() consente di ottenere una sottostringa — “tagliare” un pezzo ai parametri di indice indicati.
Esistono due forme principali di chiamata:
- str.substring(startIndex) — dalla posizione startIndex fino alla fine della stringa.
- str.substring(startIndex, endIndex) — dalla posizione startIndex fino a endIndex (SENZA includere il carattere con indice endIndex).
Attenzione: l’indicizzazione dei caratteri in una stringa parte da 0.
Esempi d’uso
Esempio 1: ottenere le prime tre lettere del nome
String name = "Vasilisa";
String firstThree = name.substring(0, 3); // "Vas"
System.out.println(firstThree);
Esempio 2: ottenere l’estensione di un file
String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);
Esempio 3: ultimi 4 caratteri della stringa
String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("Ultime 4 cifre: " + lastFour);
Particolarità e accortezze
- Indici non validi (startIndex < 0, endIndex > length, startIndex > endIndex) generano StringIndexOutOfBoundsException.
- Il metodo restituisce sempre una nuova stringa — l’originale non cambia.
- La seconda forma (con due parametri) non include il carattere con indice endIndex.
String str = "abcdef";
// Indici: 0 1 2 3 4 5
str.substring(1, 4) → "bcd" // caratteri con indici 1, 2, 3
substring(start, end)
3. Metodo indexOf(): cerchiamo un carattere o una sottostringa
Il metodo indexOf() cerca la posizione (indice) della prima occorrenza di un dato carattere o di una sottostringa.
- Se trova — restituisce l’indice (a partire da 0).
- Se non trova — restituisce -1.
Esempi d’uso
Esempio 1: trovare il primo punto nell’email
String email = "ivan.petrov@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("Il primo punto è alla posizione: " + dotIndex); // 4
Esempio 2: trovare una sottostringa
String text = "Io amo Java!";
int index = text.indexOf("Java");
System.out.println(index); // 7
Esempio 3: trovare un carattere dopo una certa posizione
String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("La seconda 'a' è alla posizione: " + secondA);
Particolarità e accortezze
- Se il carattere/la sottostringa compare più volte, viene restituito l’indice della prima occorrenza.
- Per l’ultima occorrenza usa lastIndexOf().
- Per un carattere usa gli apici singoli: 'a'; per una sottostringa — le virgolette doppie: "abc".
Esempio: ricerca dell’estensione del file
String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("Estensione del file: " + extension); // "docx"
4. Metodo charAt(): ottieni un carattere per indice
Il metodo charAt(index) restituisce il carattere della stringa al suo indice.
Esempi d’uso
Esempio 1: controllare la prima lettera della stringa
String city = "Minsk";
char first = city.charAt(0); // 'M'
System.out.println("Prima lettera: " + first);
Esempio 2: verificare se la stringa inizia con una maiuscola
String word = "Java";
if (Character.isUpperCase(word.charAt(0)))
{
System.out.println("La parola inizia con una lettera maiuscola!");
}
Esempio 3: iterare tutti i caratteri della stringa
String text = "Ciao";
for (int i = 0; i < text.length(); i++)
{
System.out.println("Carattere #" + i + ": " + text.charAt(i));
}
Particolarità e accortezze
- Un indice fuori intervallo (ad esempio, -1 o >= length) causerà StringIndexOutOfBoundsException.
- Il metodo restituisce un valore di tipo char, non una stringa.
5. Metodo toCharArray(): convertiamo una stringa in un array di caratteri
Il metodo toCharArray() — un modo semplice per convertire una stringa in un array di caratteri (char[]). Utile per l’elaborazione per caratteri, l’ordinamento, i controlli, ecc.
Esempio d’uso:
String text = "Hello";
char[] characters = text.toCharArray();
for (char c : characters)
{
System.out.println(c);
}
// Output:
// H
// e
// l
// l
// o
A cosa serve:
- Elaborazione dei caratteri: gli array sono più comodi per la logica per caratteri (ad esempio, controllo di anagrammi).
- Compatibilità: alcune API si aspettano char[] come argomento.
6. Metodo replace(): sostituiamo sottostringhe
Il metodo replace(CharSequence target, CharSequence replacement) sostituisce tutte le occorrenze della sottostringa target con replacement. Restituisce una nuova stringa, l’originale non cambia.
Esempio d’uso:
String sentence = "Amo la programmazione in Java.";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// Output: Amo la programmazione in Java 25.
String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// Output: support[at]company.com
Particolarità e accortezze
- Vengono sostituite tutte le occorrenze.
- String è immutabile: replace() restituisce una nuova stringa.
- Per regole più complesse usa replaceAll() con un’espressione regolare.
7. Metodi trim() e strip(): eliminiamo gli spazi
Entrambi i metodi rimuovono i caratteri “invisibili” all’inizio e alla fine della stringa.
- trim() — metodo classico: rimuove spazi, tabulazioni, a capo e parte dei caratteri di controllo, ma non tutti gli spazi Unicode.
- strip() — metodo moderno: considera tutti i tipi di spazi secondo lo standard Unicode. Preferibile nei nuovi progetti.
Esempio d’uso:
String s1 = " Ciao, mondo! ";
System.out.println(s1.trim());
// Output: "Ciao, mondo!"
String s2 = " \u2005 Java 11 \u2005 "; // \u2005 — è uno spazio Unicode
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// Output:
// trim(): Java 11
// strip(): Java 11
A cosa serve:
- Pulizia dell’input utente dagli spazi superflui.
- Normalizzazione dei dati da file/log prima dell’elaborazione.
8. Pratica: risolviamo esercizi
Esercizio 1: verifica della lunghezza della password
String password = "qwerty";
if (password.length() < 8)
{
System.out.println("La password è troppo corta!");
}
else
{
System.out.println("La password va bene.");
}
Esercizio 2: estrazione del nome da nome completo
String fullName = "Rossi Mario Maria";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("Nome: " + name); // "Mario"
Esercizio 3: verifica che la stringa inizi con una certa lettera
String surname = "Petrov";
if (surname.charAt(0) == 'P')
{
System.out.println("Il cognome inizia con la lettera P");
}
Esercizio 4: ottenere il dominio da un’email
String email = "vasya.pupkin@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("Dominio: " + domain); // "gmail.com"
Esercizio 5: trovare tutte le occorrenze della lettera 'a' in una stringa
String s = "abracadabra";
int pos = s.indexOf('a');
while (pos != -1)
{
System.out.println("La lettera 'a' si trova alla posizione: " + pos);
pos = s.indexOf('a', pos + 1); // cerchiamo a partire dall'ultima posizione trovata
}
9. Errori tipici nell’uso dei metodi di String
Errore n. 1: indice fuori dai limiti della stringa
Spesso ci si confonde con gli indici e si accede a un carattere/sottostringa inesistente.
String s = "Java";
char c = s.charAt(4); // Errore! Indici 0..3
String s = "Hello";
String sub = s.substring(3, 10); // Errore! La lunghezza della stringa — 5
Errore n. 2: confusione tra inclusione/esclusione dell’indice
Il metodo substring(start, end) include il carattere con indice start, ma NON include il carattere con indice end.
Errore n. 3: aspettarsi che indexOf restituisca qualcosa di diverso da -1 se la sottostringa non esiste
Verifica il risultato prima di usarlo, soprattutto se poi lo usi in substring.
Errore n. 4: gestione errata delle stringhe vuote
Se la stringa è vuota (""), le chiamate a charAt(0) o substring(0, 1) produrranno un errore. Controlla prima la lunghezza.
Errore n. 5: lavorare con stringhe null
Se la stringa è null, la chiamata a qualsiasi metodo (length(), substring(), ecc.) causerà NullPointerException. Controlla sempre null prima dell’elaborazione.
GO TO FULL VERSION