HOWTO · Java
Come sostituire più caratteri in una stringa in Java
Scopri come sostituire più caratteri in una stringa Java con replaceAll(), replace() e replaceFirst().
In questa pagina
In Java, usa String.replaceAll() con una classe di caratteri di un’espressione regolare per sostituire più caratteri selezionati in tutta la stringa. Per sostituzioni letterali che non richiedono un modello, concatena chiamate a String.replace(). Usa String.replaceFirst() quando vuoi modificare solo la prima corrispondenza dell’espressione regolare.
Sostituisci più caratteri in una stringa usando replaceAll() in Java
String.replaceAll(regex, replacement) interpreta il primo argomento come un’espressione regolare e sostituisce tutte le corrispondenze. Una classe di caratteri come [_/] corrisponde a un trattino basso oppure a una barra / alla volta. Non corrisponde alla sequenza di due caratteri _/ considerata come un’unica coppia.
Il programma completo seguente sostituisce trattini bassi e barre con trattini e poi stampa entrambe le stringhe:
public class ReplaceAllChars {
public static void main(String[] args) {
String input = "j_u_s_t/a/s/t/r/i/n/g";
String result = input.replaceAll("[_/]", "-");
System.out.println("Input: " + input);
System.out.println("Result: " + result);
}
}
Input: j_u_s_t/a/s/t/r/i/n/g
Result: j-u-s-t-a-s-t-r-i-n-g
Nel codice Java, anche il carattere barra rovesciata usato dall’espressione regolare deve essere preceduto da una barra rovesciata nel letterale stringa. Per esempio, "\\d" fornisce all’espressione regolare \d, che corrisponde a una cifra. Sostituendo una corrispondenza con "" la si elimina. Per esempio, "abcd12345efgh".replaceAll("\\d", "") rimuove le cifre, "s t r i n g".replaceAll(" ", "") rimuove gli spazi ordinari e "s t\\tr".replaceAll("\\s", "-") sostituisce con trattini gli spazi riconosciuti da \s, inclusi spazi e tabulazioni.
Queste espressioni rimuovono le cifre, eliminano gli spazi ordinari e sostituiscono con trattini gli spazi riconosciuti da \s (inclusi spazi e tabulazioni). Per rimuovere nello specifico le lettere minuscole ASCII, usa [a-z]. In Java, per impostazione predefinita \p{Lower} è limitato ai caratteri ASCII; include anche lettere minuscole Unicode solo quando è attivo il comportamento delle classi di caratteri Unicode.
Sostituisci più caratteri in una stringa usando String.replace() in Java
String.replace(target, replacement) cerca una sequenza letterale di caratteri, non un’espressione regolare. Ogni chiamata sostituisce tutte le occorrenze del testo cercato e restituisce una nuova stringa; le stringhe Java sono immutabili. La concatenazione delle chiamate è utile quando ogni elemento da sostituire ha una propria corrispondenza. Le chiamate vengono eseguite da sinistra a destra, quindi una sostituzione precedente può creare testo che verrà trovato da una chiamata successiva.
Per esempio, partendo da "javbjavcjadakavajavc", la catena input.replace("b", "a").replace("c", "a").replace("d", "v").replace("k", "j") produce javajavajavajavajava. Scegli replace() quando devi cercare stringhe letterali e vuoi esprimere ogni sostituzione con una chiamata distinta; usa replaceAll() quando un’espressione regolare può descrivere insieme i caratteri da modificare.
Sostituisci più caratteri in una stringa usando String.replaceFirst() in Java
Anche String.replaceFirst(regex, replacement) accetta un’espressione regolare, ma sostituisce solo la prima corrispondenza per chiamata. Se ripeti la chiamata, la ricerca successiva viene eseguita sulla stringa restituita dalla chiamata precedente. Questo può essere utile quando il numero e l’ordine delle modifiche sono intenzionali.
Per esempio, "This is a sample string.".replaceFirst("i", "1").replaceFirst("s", "2") restituisce Th12 is a sample string.. La prima chiamata modifica la i in This; la seconda cerca quindi la prima s nella stringa aggiornata, cioè la s di This. Usa replaceFirst() quando vuoi modificare solo la prima corrispondenza; usa replaceAll() quando vuoi modificare tutte le corrispondenze.
Conclusione
Per sostituire più caratteri selezionati, usa una classe di caratteri regex con String.replaceAll() per modificare tutte le corrispondenze. Concatena chiamate a String.replace() per sostituzioni letterali e scegli String.replaceFirst() quando ogni chiamata deve intervenire solo sulla prima corrispondenza dell’espressione regolare.