Pridajte znak do reťazca na danej pozícii

1. Úvod

V tomto rýchlom návode to urobíme ukážte, ako pridať znak na ľubovoľné miesto v a String v Java.

Predstavíme si tri implementácie jednoduchej funkcie, ktorá preberá originál Reťazec, postavu a pozíciu, kam ju musíme pridať.

Pretože trieda String je konečná a nemenná, funkcia by mala vrátiť novú String s pridaným znakom.

2. Používanie znaku Pole

Cieľom je vytvoriť nové pole znakov a skopírovať znaky z pôvodného String pred danou pozíciou.

Potom sme postavili novú postavu a skopírovali sme ostatné postavy z pôvodnej String na nasledujúcich pozíciách nového poľa.

Nakoniec zostrojíme požadované String z toho poľa.

public String addChar (String str, char ch, int position) {int len ​​= str.length (); char [] updatedArr = nový char [len + 1]; str.getChars (0, pozícia, updatedArr, 0); updatedArr [position] = ch; str.getChars (pozícia, len, updatedArr, pozícia + 1); vrátiť nový reťazec (updatedArr); }

V porovnaní s ostatnými dvoma metódami ide o koncepciu na nízkej úrovni, ktorá nám poskytuje najväčšiu flexibilitu.

3. Pomocou podreťazec Metóda

Ľahším a vyšším prístupom je použitie podreťazec () metóda String trieda. Pripravuje sa String zreťazením:

  1. Podreťazec originálu String pred pozíciou
  2. Nová postava
  3. Podreťazec originálu String po polohe
public String addChar (String str, char ch, int position) {return str.substring (0, position) + ch + str.substring (position); }

Aj keď je vyššie uvedený kód čitateľnejší, má nevýhodu v tom, že vytvára množstvo dočasných objektov na určenie výsledku. Ako String je nemenná trieda, každé volanie podreťazec () metóda vytvorí nový String inštancia.

Nakoniec, keď zreťazíme časti, kompilátor vytvorí a StringBuilder jeden za druhým. Každý String a StringBuilder objekt prideľuje samostatné pamäťové miesta pre svoje interné pole znakov.

Táto implementácia musí tiež trikrát skopírovať všetky znaky z jedného poľa do druhého.

Ak potrebujeme metódu zavolať veľakrát, dočasné objekty môžu zaplniť haldy pamäte a to bude veľmi často spúšťať GC. To môže do istej miery tiež ovplyvniť výkon.

4. Pomocou a StringBuilder

StringBuilder je úžitková trieda poskytovaná Java knižnica konštruovať a manipulovať String objektov rôznymi spôsobmi.

Rovnakú funkcionalitu môžeme implementovať pomocou vložiť () metóda StringBuilder trieda:

public String addChar (String str, char ch, int position) {StringBuilder sb = nový StringBuilder (str); sb.vloženie (poloha, ch); vrátiť sb.toString (); }

Vyššie uvedený kód musí vytvoriť iba jeden StringBuilder objekt na vloženie znaku na dané miesto. Prideľuje rovnaké množstvo pamäte ako originál String má, ale aby sa vytvorilo miesto pre nový znak, podkladové pole posunie ďalšie znaky o 1 pozíciu.

Aj keď pomocou a StringBuilder môže byť pomalší, nemá pamäťovú náročnosť pri inicializácii dočasných objektov. Tiež skončíme s kódom, ktorý je jednoduchý a čitateľný.

5. Záver

V tomto článku sme sa zamerali na niekoľko spôsobov pridania postavy v a String namietať v Java. Videli sme, že implementácia pomocou znakového poľa ponúka najlepší výkon a to s podreťazec metóda poskytuje čitateľnejší prístup.

Preferovaným spôsobom implementácie riešenia je použitie the StringBuilder trieda - pretože je to jednoduché, menej náchylné na chyby a ponúka dobrý a stabilný výkon.

Kompletný zdrojový kód pre vyššie uvedený tutoriál je ako obvykle k dispozícii na GitHub.