Aggiungi un carattere a una stringa in una determinata posizione

1. Introduzione

In questo rapido tutorial, dimostreremo come aggiungere un carattere in una determinata posizione in una stringa in Java .

Presenteremo tre implementazioni di una semplice funzione che prende la stringa originale , un carattere e la posizione in cui dobbiamo aggiungerla.

Poiché la classe String è finale e immutabile, la funzione dovrebbe restituire una nuova String con il carattere aggiunto.

2. Utilizzo di una matrice di caratteri

Qui l'idea è di creare un nuovo array di caratteri e copiare i caratteri dalla stringa originale prima della posizione data.

Dopodiché, mettiamo il nuovo carattere nella posizione e copiamo il resto dei caratteri dalla stringa originale nelle posizioni successive del nuovo array.

Infine, costruiamo la stringa desiderata da quell'array.

public String addChar(String str, char ch, int position) { int len = str.length(); char[] updatedArr = new char[len + 1]; str.getChars(0, position, updatedArr, 0); updatedArr[position] = ch; str.getChars(position, len, updatedArr, position + 1); return new String(updatedArr); }

Rispetto agli altri due metodi, questo è un approccio di progettazione di basso livello e ci offre la massima flessibilità.

3. Utilizzo del metodo della sottostringa

Un approccio più semplice e di livello superiore consiste nell'usare il metodo substring () della classe String . Prepara la stringa concatenando:

  1. La sottostringa dell'originale String prima della posizione
  2. Il nuovo personaggio
  3. La sottostringa dell'originale String dopo la posizione
public String addChar(String str, char ch, int position) { return str.substring(0, position) + ch + str.substring(position); }

Sebbene il codice precedente sia più leggibile, ha uno svantaggio in quanto crea una serie di oggetti temporanei per determinare il risultato. Poiché String è una classe immutabile, ogni chiamata al suo metodo substring () crea una nuova istanza String .

Infine, quando concateniamo le parti, il compilatore crea un oggetto StringBuilder per aggiungerle una per una. Ogni oggetto String e StringBuilder alloca posizioni di memoria separate per la sua matrice di caratteri interna.

Questa implementazione deve anche copiare tutti i caratteri tre volte da un array a un altro.

Se dobbiamo chiamare il metodo un numero enorme di volte, gli oggetti temporanei possono riempire la memoria dell'heap e questo attiverà GC molto frequentemente. Ciò può anche influire in una certa misura sulle prestazioni.

4. Utilizzo di uno StringBuilder

StringBuilder è una classe di utilità fornita dalla libreria Java per costruire e manipolare oggetti String in diversi modi.

Possiamo implementare la stessa funzionalità utilizzando il metodo insert () della classe StringBuilder :

public String addChar(String str, char ch, int position) { StringBuilder sb = new StringBuilder(str); sb.insert(position, ch); return sb.toString(); }

Il codice precedente deve creare un solo oggetto StringBuilder per inserire il carattere nella posizione. Alloca la stessa quantità di memoria della stringa originale , ma per creare un posto per il nuovo carattere, l'array sottostante sposta i caratteri successivi di 1 posizione.

Sebbene l'utilizzo di StringBuilder possa essere più lento, non ha il carico di memoria dell'inizializzazione di oggetti temporanei. Finiamo anche con un codice semplice e leggibile.

5. conclusione

In questo articolo, ci siamo concentrati su diversi modi per aggiungere un carattere in un oggetto String in Java . Abbiamo visto che l'implementazione che utilizza un array di caratteri offre le migliori prestazioni e che con il metodo della sottostringa offre un approccio più leggibile.

Il modo preferito per implementare la soluzione è utilizzare la classe StringBuilder , poiché è semplice, meno soggetta a bug e offre prestazioni buone e stabili .

Come al solito, il codice sorgente completo per il tutorial sopra è disponibile su GitHub.