Dodajte znak u niz na zadanom položaju

1. Uvod

U ovom brzom uputstvu ćemo demonstrirati kako dodati znak u bilo kojem položaju u a Niz u Java.

Predstavit ćemo tri implementacije jednostavne funkcije koja uzima izvornik Niz, lik i položaj na kojem ga trebamo dodati.

Budući da je klasa String konačna i nepromjenjiva, funkcija bi trebala vratiti novu Niz s dodanim znakom.

2. Korištenje znaka Polje

Ovdje je ideja stvoriti novi niz znakova i kopirati ih iz izvornika Niz prije zadanog položaja.

Nakon toga stavimo novi lik na mjesto i kopiramo ostatak znakova iz izvornika Niz u sljedećim položajima novog niza.

Napokon, konstruiramo željeno Niz iz tog niza.

javni String addChar (String str, char ch, int position) {int len ​​= str.length (); char [] updatedArr = novi char [len + 1]; str.getChars (0, pozicija, updatedArr, 0); updatedArr [pozicija] = ch; str.getChars (pozicija, len, updatedArr, pozicija + 1); vrati novi String (updatedArr); }

U usporedbi s druge dvije metode, ovo je pristup dizajnu na niskoj razini i pruža nam najveću fleksibilnost.

3. Korištenje podniz Metoda

Jednostavniji i viši pristup je korištenje podniz () metoda Niz razred. Priprema Niz spajanjem:

  1. Podniz izvornika Niz prije položaja
  2. Novi lik
  3. Podniz izvornika Niz nakon položaja
javni String addChar (String str, char ch, int position) {return str.substring (0, position) + ch + str.substring (position); }

Iako je gornji kod čitljiviji, ima lošu stranu u tome što stvara brojne privremene objekte za određivanje rezultata. Kao Niz je nepromjenjiva klasa, svaki poziv na nju podniz () metoda stvara novi Niz primjer.

Konačno, kada spajamo dijelove, kompajler kreira a StringBuilder objekt za njihovo dodavanje jedan po jedan. Svaki Niz i StringBuilder objekt dodjeljuje odvojena memorijska mjesta za svoj unutarnji niz znakova.

Ova implementacija također treba tri puta kopirati sve znakove iz jednog polja u drugi.

Ako metodu moramo pozvati ogroman broj puta, privremeni objekti mogu ispuniti hrpu memorije i to će vrlo često aktivirati GC. To također može donekle utjecati na performanse.

4. Korištenje a StringBuilder

StringBuilder je klasa korisnosti koju pruža Java knjižnica za izgradnju i manipulaciju Niz objekte na više načina.

Istu funkcionalnost možemo implementirati pomoću umetnuti() metoda StringBuilder razred:

javni String addChar (String str, char ch, int position) {StringBuilder sb = novi StringBuilder (str); sb.insert (položaj, ch); vratiti sb.toString (); }

Gornji kod treba stvoriti samo jedan StringBuilder objekt za umetanje znaka u položaj. Dodjeljuje istu količinu memorije kao i izvornik Niz ima, ali da bi stvorio mjesto za novi znak, temeljni niz pomiče sljedeće znakove za 1 poziciju.

Iako se pomoću a StringBuilder može biti sporiji, nema opterećenja memorijom inicijalizacije privremenih objekata. Na kraju imamo i jednostavan i čitljiv kod.

5. Zaključak

U ovom smo se članku usredotočili na nekoliko načina dodavanja lika u Niz objekt u Java. Vidjeli smo da implementacija pomoću niza znakova nudi najbolje performanse i to s podniz metoda daje čitljiviji pristup.

Poželjni način implementacije rješenja je upotreba the StringBuilder klasa - jer je jednostavan, manje podložan bugovima i nudi dobre i stabilne performanse.

Kao i obično, cjeloviti izvorni kod za gornji vodič dostupan je na GitHubu.