W3docs

Metodi della Classe String in Java

Riferimento ai principali metodi Java String: length, charAt, substring, indexOf, replace, split, toUpperCase, trim e altri ancora.

La classe String include decine di metodi. Questo capitolo è un riferimento pratico di quelli che utilizzerai davvero, raggruppati per funzione: ispezione, confronto, ricerca, suddivisione, trasformazione, splitting/joining, conversione e formattazione.

Ricorda: le stringhe sono immutabili. Ogni metodo restituisce una nuova stringa (o un altro valore) — non modifica mai la stringa su cui viene chiamato. Ciò significa che una chiamata come s.toUpperCase(); da sola non è utile; devi catturare il risultato:

String s = "hello";
s.toUpperCase();        // result discarded — s is still "hello"
s = s.toUpperCase();    // s is now "HELLO"

Gli indici sono a base zero e contano le unità di codice UTF-16, non i caratteri percepiti dall'utente, il che è rilevante per emoji e altri caratteri supplementari.

Ispezione di una stringa

MetodoCosa restituisce
length()numero di unità di codice UTF-16
isEmpty()true se la lunghezza è 0
isBlank() (Java 11+)true se la lunghezza è 0 o contiene solo spazi bianchi
charAt(int i)il carattere all'indice i
codePointAt(int i)il code point Unicode all'indice i
"hello".length();      // 5
"".isEmpty();          // true
"   ".isBlank();       // true
"hello".charAt(1);     // 'e'

Confronto di stringhe

MetodoCosa restituisce
equals(other)true se il contenuto è uguale
equalsIgnoreCase(other)uguaglianza senza distinzione tra maiuscole e minuscole
compareTo(other)ordinamento lessicografico negativo / 0 / positivo
compareToIgnoreCase(other)come sopra, senza distinzione tra maiuscole e minuscole
"hi".equals("hi");                  // true
"HI".equalsIgnoreCase("hi");        // true
"apple".compareTo("banana");        // negative

Preferisci sempre .equals() a == per il confronto del contenuto (Operatori di Confronto). == confronta i riferimenti agli oggetti — se due variabili puntano allo stesso oggetto — non i caratteri al loro interno. Poiché Java interna i letterali stringa, == sembra funzionare a volte, ma fallisce nel momento in cui una stringa viene costruita a runtime:

String a = "hi";
String b = "hi";
String c = new String("hi");

a == b;          // true  — both point to the same interned literal
a == c;          // false — c is a different object
a.equals(c);     // true  — same contents

compareTo è quello che ti serve per l'ordinamento: restituisce un numero negativo, zero o un numero positivo, quindi si integra direttamente in Collections.sort o nelle catene Comparator.

Ricerca

MetodoCosa restituisce
contains(seq)true se seq appare in qualsiasi punto
indexOf(seq)primo indice dove inizia seq, o -1
indexOf(seq, fromIndex)come sopra, partendo da fromIndex
lastIndexOf(seq)ultimo indice dove inizia seq, o -1
startsWith(prefix)true se la stringa inizia con prefix
endsWith(suffix)true se la stringa termina con suffix
String s = "abc-xyz-abc";
s.contains("xyz");       // true
s.indexOf("abc");        // 0
s.lastIndexOf("abc");    // 8
s.startsWith("abc");     // true
s.endsWith("xyz");       // false

Suddivisione

MetodoCosa restituisce
substring(start)dalla posizione start fino alla fine
substring(start, end)da start (incluso) a end (escluso)
String s = "Hello, World!";
s.substring(7);        // "World!"
s.substring(7, 12);    // "World"

Gli indici negativi non sono consentiti — generano una StringIndexOutOfBoundsException.

Trasformazione

MetodoCosa restituisce
toUpperCase()copia in maiuscolo
toLowerCase()copia in minuscolo
trim()copia senza spazi bianchi ASCII iniziali/finali
strip() (Java 11+)copia senza spazi bianchi Unicode iniziali/finali
replace(old, new)ogni corrispondenza letterale sostituita
replaceAll(regex, replacement)sostituzione basata su espressione regolare
replaceFirst(regex, replacement)espressione regolare, solo la prima corrispondenza
repeat(n) (Java 11+)la stringa ripetuta n volte
concat(other)identico a s + other
"  hello  ".strip();                 // "hello"
"banana".replace("a", "_");          // "b_n_n_"
"hello".repeat(3);                   // "hellohellohello"
"abc 123".replaceAll("\\d", "*");    // "abc ***"

Splitting e joining

MetodoCosa restituisce
split(regex)array di sottostringhe
split(regex, limit)come sopra, ma limitato a limit parti
String.join(sep, parts...)metodo statico — unisce con separatore
chars()IntStream di unità di codice UTF-16
lines() (Java 11+)Stream<String> di righe
"a,b,c".split(",");                     // ["a","b","c"]
String.join("-", "a", "b", "c");        // "a-b-c"
String.join(",", List.of("a","b"));     // "a,b"
"line1\nline2\nline3".lines().count();  // 3

split accetta un'espressione regolare, non una stringa semplice — quindi effettua l'escape dei metacaratteri regex: usa split("\\.") per dividere su un punto letterale, non split(".") (che corrisponde a ogni carattere e restituisce un array vuoto). Le stringhe vuote finali vengono eliminate per impostazione predefinita; passa un limit negativo (ad es. split(",", -1)) per mantenerle.

Conversione

MetodoCosa restituisce
toCharArray()char[] dei caratteri della stringa
getBytes()array di byte UTF-8 (o codifica della piattaforma, a seconda dell'overload)
String.valueOf(any)statico — converte qualsiasi valore in una stringa
Integer.parseInt(s)converte una stringa in un int
Double.parseDouble(s)converte una stringa in un double
Boolean.parseBoolean(s)converte una stringa in un boolean
String.valueOf(42);              // "42"
Integer.parseInt("42");          // 42
Double.parseDouble("3.14");      // 3.14
"hello".toCharArray();           // {'h','e','l','l','o'}

I metodi parse* generano una NumberFormatException se il testo non è un numero valido, quindi racchiudi l'input dell'utente in un blocco try/catch o validalo prima. A differenza di parseInt, String.valueOf(null) è sicuro — restituisce la stringa "null" invece di lanciare un'eccezione.

Formattazione

MetodoCosa restituisce
String.format(fmt, args...)statico — stringa formattata in stile printf
formatted(args...) (Java 15+)metodo di istanza, equivalente a format con this come fmt
String.format("%s is %d", "Ada", 36);     // "Ada is 36"
"%s is %d".formatted("Ada", 36);          // "Ada is 36"

Una dimostrazione completa

java— editable, runs on the server

Cosa fare dopo

Concatenazione di Stringhe in Java approfondisce +, concat e StringBuilder, incluso quando ciascuno è lo strumento giusto da usare.

Esercitazione

Pratica
Quale metodo restituisce true se una stringa contiene solo spazi bianchi?
Quale metodo restituisce true se una stringa contiene solo spazi bianchi?
Was this page helpful?