"Saluti, Amico!"
"Ciao Rishi!"
"Ora sai abbastanza sulle stringhe per imparare qualcosa di interessante. Più specificamente, una nuova classe simile, ma non esattamente uguale, alla classe String."
"Sembra intrigante, anche se non mi è del tutto chiaro come le stringhe ordinarie non siano all'altezza e perché siano necessarie altre classi simili a stringhe."
"Cominciamo dal fatto che le stringhe sono oggetti immutabili in Java."
"Com'è? L'ho dimenticato... o non l'ho mai saputo fin dall'inizio..."
"Lascia che ti ricordi che gli oggetti immutabili sono quelli i cui stati non possono essere cambiati dopo essere stati creati."
"Ahhh... Perché le stringhe sono immutabili in Java?"
"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 classe String sia mutabile. Vogliono una classe che non crei una nuova sottostringa ogni volta che viene chiamato uno dei suoi metodi."
"Ma a cosa serve?"
"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 della ricreazione e concatenazione costante di oggetti String."
"Ed è per questo che abbiamo bisogno di stringhe che non siano esattamente la classe String?"
"Esattamente. Il linguaggio Java ha aggiunto un tipo simile a String che può essere modificato. Si chiama StringBuilder
".
Creazione di un oggetto
"Per creare un StringBuilder
oggetto 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 StringBuilder
classe ha due dozzine di metodi utili. Ecco i più importanti:
Metodo | Descrizione |
---|---|
|
Converte l'oggetto passato in una stringa e lo accoda alla stringa corrente |
|
Converte l'oggetto passato in una stringa e lo inserisce al centro della stringa corrente |
|
Sostituisce la parte della stringa specificata dall'intervallo start..end con la stringa passata |
|
Rimuove il carattere con l'indice specificato dalla stringa |
|
Rimuove i caratteri all'interno dell'intervallo specificato dalla stringa |
|
Cerca una sottostringa nella stringa corrente |
|
Cerca una sottostringa nella stringa corrente, a partire dalla fine |
|
Restituisce il carattere nella stringa in corrispondenza dell'indice passato |
|
Restituisce la sottostringa definita dall'intervallo specificato |
|
Inverte la stringa corrente. |
|
Cambia il carattere in corrispondenza dell'indice specificato nel carattere passato |
|
Restituisce la lunghezza della stringa in caratteri |
"E ora ti descriverò brevemente ciascuno di questi metodi.
Aggiunta a una stringa
"Per aggiungere qualcosa a una stringa mutabile ( StringBuilder
), utilizzare il append()
metodo. Esempio:
Codice | Descrizione |
---|---|
|
Hi |
Conversione in una stringa standard
"Per convertire un StringBuilder
oggetto in un oggetto String, devi solo chiamare il suo toString()
metodo. Esempio
Codice | Produzione |
---|---|
|
Hi123 |
Come cancello un personaggio?
"Per eliminare un carattere in una stringa mutabile, è necessario utilizzare il deleteCharAt()
metodo. Esempio:
Codice | Produzione |
---|---|
|
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 |
---|---|
|
MeHello!w |
"Sembra conveniente. Grazie, Rishi."
"Non menzionarlo. Che ne dici di questo, puoi capovolgere una corda all'indietro? Come lo faresti?"
"Beh... creerei un StringBuilder
, ci inserirei una stringa... Poi creerei una nuova stringa, e in un ciclo dall'ultimo carattere al primo... O forse uno spostamento bit a bit...
"Non male. Ma potrebbe essere più veloce. C'è un metodo speciale per farlo - reverse();
Esempio:
Codice | Produzione |
---|---|
|
olleH |
"Oltre alla StringBuilder
classe, Java ha un'altra classe simile a una stringa chiamata StringBuffer
. È un analogo della StringBuilder
classe, ma i suoi metodi sono contrassegnati con il synchronized
modificatore."
"Che cosa significa?"
"Significa che StringBuffer
è possibile accedere all'oggetto contemporaneamente da più thread."
"Non ho ancora molta familiarità con i thread. Ma 'è possibile accedere da più thread' è chiaramente meglio di 'non è possibile accedere da più thread'... Perché non usare sempre StringBuffer
allora?"
"Perché è molto più lento di StringBuilder
. Potresti aver bisogno di una classe del genere quando inizi a esplorare attivamente il multithreading nella ricerca Java Multithreading .
"Lo scriverò nella mia memoria per non dimenticare. Segnato 'per il futuro'.
GO TO FULL VERSION