Voeg een karakter toe aan een string op een bepaalde positie

1. Inleiding

In deze korte tutorial zullen we laten zien hoe u een teken kunt toevoegen op een bepaalde positie in een Draad in Java.

We zullen drie implementaties presenteren van een eenvoudige functie die het origineel gebruikt Draad, een karakter en de positie waar we het moeten toevoegen.

Omdat de String-klasse definitief en onveranderlijk is, zou de functie een new Draad met het toegevoegde karakter.

2. Met behulp van een karakter Array

Hier is het de bedoeling om een ​​nieuwe tekenreeks te maken en de tekens uit het origineel te kopiëren Draad voor de gegeven positie.

Daarna plaatsen we het nieuwe karakter op de positie en kopiëren we de rest van de karakters van het origineel Draad in de volgende posities van de nieuwe array.

Ten slotte construeren we het gewenste Draad uit die reeks.

public String addChar (String str, char ch, int position) {int len ​​= str.length (); char [] updatedArr = nieuw char [len + 1]; str.getChars (0, positie, updatedArr, 0); updatedArr [positie] = ch; str.getChars (position, len, updatedArr, position + 1); retourneer nieuwe String (updatedArr); }

In vergelijking met de andere twee methoden is dit een ontwerpbenadering op laag niveau en biedt dit ons de meeste flexibiliteit.

3. Gebruik de deelstring Methode

Een eenvoudigere aanpak op een hoger niveau is om de deelstring () methode van de Draad klasse. Het bereidt het Draad door aaneenschakeling van:

  1. De substring van het origineel Draad voor de positie
  2. Het nieuwe personage
  3. De substring van het origineel Draad na de positie
public String addChar (String str, char ch, int position) {return str.substring (0, position) + ch + str.substring (position); }

Hoewel de bovenstaande code beter leesbaar is, het heeft een keerzijde: het creëert een aantal tijdelijke objecten om het resultaat te bepalen. Net zo Draad is een onveranderlijke klasse, elke oproep tot zijn deelstring () methode creëert een nieuw Draad voorbeeld.

Ten slotte, wanneer we de onderdelen samenvoegen, maakt de compiler een StringBuilder object om ze een voor een toe te voegen. Elke Draad en StringBuilder object wijst afzonderlijke geheugenlocaties toe voor zijn interne tekenreeks.

Deze implementatie moet ook alle tekens driemaal van de ene array naar de andere kopiëren.

Als we de methode een groot aantal keren moeten aanroepen, kunnen de tijdelijke objecten het heap-geheugen vullen en dat zal GC zeer vaak activeren. Dit kan ook tot op zekere hoogte de prestaties beïnvloeden.

4. Met behulp van een StringBuilder

StringBuilder is een hulpprogramma-klasse die wordt aangeboden door Java bibliotheek om te construeren en te manipuleren Draad objecten op een aantal manieren.

We kunnen dezelfde functionaliteit implementeren met behulp van de invoegen () methode van de StringBuilder klasse:

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

De bovenstaande code hoeft slechts één te maken StringBuilder object om het teken op de positie in te voegen. Het wijst dezelfde hoeveelheid geheugen toe als het origineel Draad heeft, maar om een ​​plaats voor het nieuwe teken te creëren, verschuift de onderliggende array de volgende tekens met 1 positie.

Hoewel u een StringBuilder kan langzamer zijn, het heeft niet de geheugenlast van het initialiseren van tijdelijke objecten. We eindigen ook met code die eenvoudig en leesbaar is.

5. Conclusie

In dit artikel hebben we ons gericht op verschillende manieren om een ​​personage toe te voegen aan een Draad bezwaar in Java. We hebben gezien dat de implementatie met behulp van een character array de beste prestaties biedt en dat met de deelstring methode geeft een meer leesbare benadering.

De beste manier om de oplossing te implementeren is door gebruik te maken van de StringBuilder class - omdat het eenvoudig is, minder gevoelig voor bugs en goede en stabiele prestaties biedt.

Zoals gewoonlijk is de volledige broncode voor de bovenstaande tutorial beschikbaar op GitHub.