Legg til et tegn i en streng på en gitt posisjon

1. Introduksjon

I denne raske opplæringen vil vi demonstrere hvordan du legger til et tegn på en gitt posisjon i en String i Java.

Vi presenterer tre implementeringer av en enkel funksjon som tar originalen Streng, en karakter og posisjonen der vi trenger å legge den til.

Siden strengklassen er endelig og uforanderlig, bør funksjonen returnere en ny String med den ekstra karakteren.

2. Bruke et tegn Array

Her er ideen å lage et nytt tegnarray og kopiere tegnene fra originalen String før den gitte stillingen.

Etter det setter vi den nye karakteren på posisjonen og kopierer resten av karakterene fra originalen String i de påfølgende posisjonene til den nye matrisen.

Til slutt konstruerer vi ønsket String fra den matrisen.

public String addChar (String str, char ch, int position) {int len ​​= str.length (); røye [] updatedArr = ny røye [len + 1]; str.getChars (0, posisjon, oppdatert Arr, 0); updatedArr [posisjon] = ch; str.getChars (posisjon, len, oppdatert Arr, posisjon + 1); returner ny streng (updatedArr); }

Sammenlignet med de to andre metodene, er dette en design på lavt nivå og gir oss mest fleksibilitet.

3. Bruke underlag Metode

En enklere og høyere tilnærming er å bruke substring () metoden for String klasse. Det forbereder String ved å sammenkoble:

  1. Substring av originalen String før stillingen
  2. Den nye karakteren
  3. Substring av originalen String etter stillingen
public String addChar (String str, char ch, int position) {return str.substring (0, position) + ch + str.substring (position); }

Selv om koden ovenfor er mer lesbar, den har en ulempe ved at den lager et antall midlertidige objekter for å bestemme resultatet. Som String er en uforanderlig klasse, hvert kall til sitt substring () metoden skaper en ny String forekomst.

Til slutt, når vi sammenkobler delene, lager kompilatoren en StringBuilder objekt for å legge dem til en etter en. Hver String og StringBuilder objektet tildeler separate minneplasseringer for det interne tegnoppsettet.

Denne implementeringen må også kopiere alle tegnene tre ganger fra en matrise til en annen.

Hvis vi trenger å kalle metoden et stort antall ganger, kan de midlertidige objektene fylle haugminnet, og det vil utløse GC veldig ofte. Dette kan også påvirke ytelsen til en viss grad.

4. Bruke en StringBuilder

StringBuilder er en nytteklasse levert av Java bibliotek for å konstruere og manipulere String objekter på en rekke måter.

Vi kan implementere den samme funksjonaliteten ved hjelp av sett inn() metoden for StringBuilder klasse:

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

Ovennevnte kode må bare opprette en enkelt StringBuilder objekt for å sette inn tegnet på posisjonen. Den tildeler samme mengde minne som originalen String har, men for å skape et sted for det nye tegnet, skifter den underliggende matrisen de neste tegnene med 1 posisjon.

Selv om du bruker en StringBuilder kan være tregere, har det ikke minnebyrden ved å initialisere midlertidige objekter. Vi ender også opp med kode som er enkel og lesbar.

5. Konklusjon

I denne artikkelen fokuserte vi på flere måter å legge til et tegn i en String objekt i Java. Vi har sett at implementeringen ved hjelp av et tegnarray gir best ytelse og det med underlag metode gir en mer lesbar tilnærming.

Den foretrukne måten å implementere løsningen på er å bruke de StringBuilder klasse - siden det er enkelt, mindre utsatt for feil og gir god og stabil ytelse.

Som vanlig er den komplette kildekoden for opplæringen ovenfor tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found