1. Modifica delle stringhe

In Java, le stringhe sono oggetti immutabili. Questo è stato fatto per rendere la classe String altamente ottimizzata e per consentirne l'utilizzo ovunque. Ad esempio, solo i tipi immutabili sono consigliati per l'uso come chiavi nella raccolta HashMap .

Tuttavia, si verificano spesso situazioni in cui i programmatori troverebbero più conveniente che la Stringclasse sia mutabile. Vogliono una classe che non crei una nuova sottostringa ogni volta che viene chiamato uno dei suoi metodi.

Bene, supponiamo di avere una stringa molto grande e di dover aggiungere frequentemente qualcosa alla fine di essa. In questo caso, anche una raccolta di caratteri ( ArrayList<Character>) può essere più efficiente che ricreare e concatenare costantemente oggetti String.

Questo è esattamente il motivo per cui è stato aggiunto al linguaggio Java un tipo simile a String che può essere modificato. Si chiama StringBuilder.

Creazione di un oggetto

Per creare un StringBuilderoggetto basato su una stringa esistente, devi eseguire un'istruzione come:

StringBuilder name = new StringBuilder(string);

Per creare una stringa mutabile vuota, è necessario utilizzare un'istruzione come questa:

StringBuilder name = new StringBuilder();

Elenco dei metodi

La StringBuilderclasse ha due dozzine di metodi utili. Ecco i più importanti:

Metodo Descrizione
StringBuilder append(obj)
Converte l'oggetto passato in una stringa e lo accoda alla stringa corrente
StringBuilder insert(int index, obj)
Converte l'oggetto passato in una stringa e lo inserisce nella stringa corrente
StringBuilder replace(int start, int end, String str)
Sostituisce la parte della stringa specificata dall'intervallo start..end con la stringa passata
StringBuilder deleteCharAt(int index)
Rimuove il carattere con l'indice specificato dalla stringa
StringBuilder delete(int start, int end)
Rimuove i caratteri all'interno dell'intervallo specificato dalla stringa
int indexOf(String str, int index)
Cerca una sottostringa nella stringa corrente
int lastIndexOf(String str, int index)
Cerca una sottostringa nella stringa corrente, a partire dalla fine
char charAt(int index)
Restituisce il carattere nella stringa in corrispondenza dell'indice passato
String substring(int start, int end)
Restituisce la sottostringa definita dall'intervallo specificato
StringBuilder reverse()
Inverte la stringa corrente.
void setCharAt(int index, char)
Cambia il carattere in corrispondenza dell'indice specificato nel carattere passato
int length()
Restituisce la lunghezza della stringa in caratteri

Ecco una breve descrizione di ciascun metodo


2. Descrizione dei metodi:

Aggiunta a una stringa

Per aggiungere qualcosa a una stringa mutabile ( StringBuilder), utilizzare il append()metodo. Esempio:

Codice Descrizione
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Conversione in una stringa standard

Per convertire un StringBuilderoggetto in un oggetto String, devi solo chiamare il suo toString()metodo. Esempio

Codice Produzione
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Come cancello un personaggio?

Per eliminare un carattere in una stringa mutabile, è necessario utilizzare il deleteCharAt()metodo. Esempio:

Codice Produzione
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Come posso sostituire parte di una stringa con un'altra stringa?

Per questo c'è il replace(int begin, int end, String str)metodo. Esempio:

Codice Produzione
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w


3. Esempi utili di lavoro con le stringhe

Come invertire una stringa?

C'è un metodo speciale per fare questo - reverse(); Esempio:

Codice Produzione
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

StringBufferclasse

C'è un'altra classe — StringBuffer, che è un analogo della StringBuilderclasse, ma i suoi metodi sono contrassegnati con il synchronizedmodificatore. Significa che StringBufferè possibile accedere all'oggetto contemporaneamente da più thread.

Ma è molto più lento di StringBuilder. Potresti aver bisogno di questa classe quando inizi a esplorare attivamente il multithreading nella ricerca Java Multithreading .