Java >> Java tutorial >  >> Tag >> char

Tilføj et tegn til en streng på en given position

1. Introduktion

I dette hurtige selvstudium vil videmonstrere, hvordan man tilføjer et tegn på en given position i en streng i Java .

Vi vil præsentere tre implementeringer af en simpel funktion, som tager den originale String, et tegn og den position, hvor vi skal tilføje det.

Da String-klassen er endelig og uforanderlig, burde funktionen returnere en ny String med det tilføjede tegn.

2. Brug af et tegn Array

Her er ideen at skabe et nyt tegnarray og kopiere tegnene fra den originale streng før den givne position.

Derefter sætter vi det nye tegn på positionen og kopierer resten af ​​tegnene fra den originale streng i de efterfølgende positioner af det nye array.

Til sidst konstruerer vi den ønskede streng fra det 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);
}

Sammenlignet med de to andre metoder er dette en designtilgang på lavt niveau og giver os den største fleksibilitet.

3. Brug af understrengen Metode

En nemmere tilgang på et højere niveau er at bruge substring() metoden for strengen klasse. Den forbereder strengen ved at sammenkæde:

  1. Understrengen af ​​den originale streng før stillingen
  2. Det nye tegn
  3. Understrengen af ​​den originale streng efter stillingen
public String addChar(String str, char ch, int position) {
    return str.substring(0, position) + ch + str.substring(position);
}

Selvom ovenstående kode er mere læsbar, har den en ulempe ved, at den opretter en række midlertidige objekter for at bestemme resultatet. Som streng er en uforanderlig klasse, hvert kald til dens substring() metoden opretter en ny streng eksempel.

Til sidst, når vi sammenkæder delene, opretter compileren en StringBuilder objekt for at tilføje dem én efter én. Hver streng og StringBuilder objekt tildeler separate hukommelsesplaceringer til dets interne tegnarray.

Denne implementering skal også kopiere alle tegnene tre gange fra et array til et andet.

Hvis vi har brug for at kalde metoden et stort antal gange, kan de midlertidige objekter fylde heap-hukommelsen, og det vil udløse GC meget ofte. Dette kan også påvirke ydeevnen til en vis grad.

4. Brug af en StringBuilder

StringBuilder er en hjælpeklasse leveret af Java bibliotek til at konstruere og manipulere streng objekter på en række måder.

Vi kan implementere den samme funktionalitet ved at bruge insert() metoden for StringBuilder klasse:

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

Ovenstående kode behøver kun at oprette en enkelt StringBuilder objekt for at indsætte tegnet på positionen. Den tildeler den samme mængde hukommelse som den originale streng har, men for at skabe en plads til det nye tegn, flytter det underliggende array de næste tegn med 1 position.

Selvom du bruger en StringBuilder kan være langsommere, den har ikke hukommelsesbyrden ved at initialisere midlertidige objekter. Vi ender også med kode, der er enkel og læsbar.

5. Konklusion

I denne artikel fokuserede vi på flere måder at tilføje et tegn i en streng objekt i Java . Vi har set, at implementeringen ved hjælp af et tegnarray giver den bedste ydeevne, og det med understrengen metode giver en mere læsbar tilgang.

Den foretrukne måde at implementere løsningen på er at bruge StringBuilder klasse – da den er enkel, mindre udsat for fejl og tilbyder god og stabil ydeevne .

Som sædvanlig er den komplette kildekode til ovenstående tutorial tilgængelig på GitHub.


Java tag