Fügen Sie einem String an einer bestimmten Position ein Zeichen hinzu

1. Einleitung

In diesem kurzen Tutorial zeigen wir Ihnen , wie Sie ein Zeichen an einer bestimmten Position in einem String in Java hinzufügen .

Wir werden drei Implementierungen einer einfachen Funktion vorstellen, die den ursprünglichen String, ein Zeichen und die Position verwendet, an der wir ihn hinzufügen müssen.

Da die String-Klasse endgültig und unveränderlich ist, sollte die Funktion einen neuen String mit dem hinzugefügten Zeichen zurückgeben.

2. Mit einem Character Array

Hier ist die Idee , ein neues Zeichenfeld und kopieren Sie die Zeichen aus dem Original erstellen String vor der angegebenen Position.

Danach setzen wir das neue Zeichen an die Position und kopieren die restlichen Zeichen aus dem ursprünglichen String an die nachfolgenden Positionen des neuen Arrays.

Schließlich konstruieren wir den gewünschten String aus diesem 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); }

Im Vergleich zu den beiden anderen Methoden ist dies ein Entwurfsansatz auf niedriger Ebene und bietet uns die größte Flexibilität.

3. Verwendung des Teilzeichen Method

Ein einfacherer und übergeordneter Ansatz ist die Verwendung der substring () -Methode der String- Klasse. Es bereitet den String durch Verketten vor:

  1. Der Teilstring des ursprünglichen Strings vor der Position
  2. Der neue Charakter
  3. Der Teilstring des ursprünglichen Strings nach der Position
public String addChar(String str, char ch, int position) { return str.substring(0, position) + ch + str.substring(position); }

Obwohl der obige Code besser lesbar ist, hat er den Nachteil, dass er eine Reihe von temporären Objekten erstellt, um das Ergebnis zu bestimmen. Da String eine unveränderliche Klasse ist, erstellt jeder Aufruf seiner substring () -Methode eine neue String- Instanz.

Wenn wir die Teile verketten, erstellt der Compiler schließlich ein StringBuilder- Objekt, um sie einzeln anzuhängen. Jedes String- und StringBuilder- Objekt weist seinem internen Zeichenarray separate Speicherorte zu.

Diese Implementierung muss auch alle Zeichen dreimal von einem Array in ein anderes kopieren.

Wenn wir die Methode sehr oft aufrufen müssen, füllen die temporären Objekte möglicherweise den Heapspeicher und dies löst GC sehr häufig aus. Dies kann in gewissem Maße auch die Leistung beeinträchtigen.

4. Verwenden eines StringBuilder

StringBuilder ist eine Dienstprogrammklasse, die von der Java- Bibliothek bereitgestellt wird , um String- Objekte auf verschiedene Arten zu erstellen und zu bearbeiten .

Wir können dieselbe Funktionalität mit der insert () -Methode der StringBuilder- Klasse implementieren :

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

Der obige Code muss nur ein einziges StringBuilder- Objekt erstellen , um das Zeichen an der Position einzufügen. Es weist dieselbe Menge an Speicher zu, die der ursprüngliche String hat, aber um einen Platz für das neue Zeichen zu schaffen, verschiebt das zugrunde liegende Array die nächsten Zeichen um 1 Position.

Die Verwendung eines StringBuilder ist zwar möglicherweise langsamer, hat jedoch nicht die Speicherlast für die Initialisierung temporärer Objekte. Wir erhalten auch Code, der einfach und lesbar ist.

5. Schlussfolgerung

In diesem Artikel haben wir uns auf verschiedene Möglichkeiten konzentriert, ein Zeichen in ein String- Objekt in Java einzufügen . Wir haben gesehen, dass die Implementierung mit einem Zeichenarray die beste Leistung bietet und dass mit der Teilstring- Methode ein besser lesbarer Ansatz erzielt wird.

Die bevorzugte Methode zur Implementierung der Lösung ist die Verwendung der StringBuilder- Klasse, da sie einfach, weniger fehleranfällig und von guter und stabiler Leistung ist .

Wie üblich ist der vollständige Quellcode für das obige Tutorial auf GitHub verfügbar.