CodeGym /Corsi /JAVA 25 SELF /Metodi principali di String

Metodi principali di String

JAVA 25 SELF
Livello 9 , Lezione 3
Disponibile

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
Schema di funzionamento 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.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION