Zreťazenie reťazcov v Jave

1. Úvod

Java poskytuje značný počet metód a tried, ktorým sa venuje zreťazenie Struny.

V tejto príručke sa ponoríme do niekoľkých z nich načrtnúť niektoré bežné úskalia a zlé postupy.

2. StringBuilder

Prvý na rade je skromný StringBuilder. Táto trieda poskytuje pole Reťazec-stavebné inžinierske siete to uľahčuje prácu String manipulácia.

Poďme si vytvoriť rýchly príklad String zreťazenie pomocou StringBuilder trieda:

StringBuilder stringBuilder = nový StringBuilder (100); stringBuilder.append ("Baeldung"); stringBuilder.append ("je"); stringBuilder.append ("úžasné"); assertEquals ("Baeldung je úžasný", stringBuilder.toString ());

Interne, StringBuilder zachováva premenlivé pole znakov. V našej ukážke kódu sme deklarovali, že máme znak počiatočná veľkosť 100 cez StringBuilder konštruktér. Kvôli tomuto vyhláseniu o veľkosti je StringBuilder môže byť veľmi efektívnyspôsob spojenia Struny.

Je tiež potrebné poznamenať, že StringBuffer trieda je synchronizovaná verzia StringBuilder.

Aj keď je synchronizácia často synonymom bezpečnosti vlákien, z dôvodu sa neodporúča používať ju vo viacvláknových aplikáciách StringBuffer staviteľský vzor. Aj keď sú jednotlivé hovory synchronizovanou metódou zabezpečené pomocou viacerých vlákien, viaceré hovory nie.

3. Operátor sčítania

Ďalej nasleduje operátor sčítania (+). Toto je ten istý operátor, ktorý vedie k sčítaniu čísel a je preťažený na zreťazenie, keď sa použije na Struny.

Poďme sa rýchlo pozrieť na to, ako to funguje:

Reťazec myString = "The" + "quick" + "brown" + "fox ..."; assertEquals ("Rýchla hnedá líška ...", myString);

Na prvý pohľad sa to môže zdať oveľa stručnejšie ako StringBuilder možnosť. Keď sa však zdrojový kód skompiluje, symbol + sa prekladá do reťazcov StringBuilder.append () hovory. Z tohto dôvodu miešanie StringBuilder a + metóda zreťazenia je považované za zlý postup.

Navyše, String Malo by sa zabrániť spojeniu pomocou operátora + v rámci slučky. Keďže String objekt je nemenný, výsledkom každej výzvy na zreťazenie bude nové String vytváraný objekt.

4. String Metódy

The String trieda sama o sebe poskytuje celý rad metód zreťazenia Struny.

4.1. String.concat

Nie je prekvapením, že String.concat metóda je náš prvý port hovoru pri pokuse o zreťazenie String predmety. Táto metóda vracia a String objekt, takže reťaz je spolu metóda je užitočná vlastnosť.

Reťazec myString = "Both" .concat ("nestály") .concat ("trpaslíci") .concat ("jinx") .concat ("my") .concat ("prasa") .concat ("kvíz"); assertEquals ("Obaja vrtkaví trpaslíci sa snažia získať môj prasací kvíz", myString);

V tomto príklade je náš reťazec založený na String doslovný koncat metóda nám potom umožňuje spojiť hovory a pripojiť ich ďalej Struny.

4.2. Reťazec.formát

Ďalším na rade je Reťazec.formát metóda, ktorá nám umožňuje vstreknúť rôzne Java Predmety do a String šablóna.

The Reťazec.formát podpis metódy trvá a slobodný String označujúca našu šablónu. Toto šablóna obsahuje znaky „%“, ktoré reprezentujú rôzne Predmetyby mali byť umiestnené vrámci.

Akonáhle je naša šablóna deklarovaná, je to potom berie varargy Objekt pole, ktoré je vstreknuté do šablóny.

Pozrime sa, ako to funguje, na krátkom príklade:

String myString = String.format ("% s% s% .2f% s% s,% s ...", "ja", "jedol", 2.5056302, "čučoriedka", "koláče", "ups"); assertEquals ("Zjedol som 2,51 čučoriedkových koláčov, ups ...", myString);

Ako vidíme vyššie, metóda vstrekla našu Struny do správneho formátu.

4.3. String.join (Java 8+)

Ak náš aplikácia je spustená v prostredí Java 8alebo vyššie, môžeme využiť výhody String.join metóda. S týmto môžeme pripojiť sa k radu Struny so spoločným oddeľovačom, aby ste nezmeškali medzery.

String [] strings = {"Som", "bežím", "von", "z", "pangramy!"}; String myString = String.join ("", reťazce); assertEquals ("Dochádzajú mi pangramy!", myString); 

Obrovskou výhodou tejto metódy je, že sa nemusíte obávať oddeľovača medzi našimi reťazcami.

5. StringJoiner (Java 8+)

StringJoiner abstrakty všetky String.join funkcionalitu do ľahko použiteľnej triedy. The konštruktor vezme oddeľovač s voliteľnou predponou a príponou. Môžeme pridať Struny pomocou dobre pomenovaných pridať metóda.

StringJoiner fruitJoiner = nový StringJoiner (","); fruitJoiner.add ("Jablká"); fruitJoiner.add ("Pomaranče"); fruitJoiner.add ("banány"); assertEquals ("Jablká, Pomaranče, Banány", fruitJoiner.toString ());

Použitím tejto triedy namiesto String.join metóda, môžeme pridať Struny ako program beží; Nie je potrebné najskôr vytvárať pole!

Prejdite k nášmu článku o StringJoiner ďalšie informácie a príklady.

6. Polia.naString

Pokiaľ ide o pole, Pole trieda tiež obsahuje šikovný natiahnuť metóda, ktorá pekne naformátuje pole objektov. The Polia.natiahnuť metóda nazýva aj natiahnuť metóda ľubovoľného uzavretého objektu - musíme sa teda ubezpečiť, že máme jeden definovaný.

Reťazec [] myFavouriteLanguages ​​= {"Java", "JavaScript", "Python"}; Reťazec toString = Arrays.toString (myFavouriteLanguages); assertEquals ("[Java, JavaScript, Python]", toString);

Bohužiaľ, Polia.natiahnuť metóda nie je prispôsobiteľná a iba výstupy a String uzavreté v hranatých zátvorkách.

7. Collectors.joining (Java 8+)

Na záver sa pozrime na Collectors.joining metóda, ktorá umožňuje nám zúžiť výstup a Prúd do jedného String.

Zoznam awesomeAnimals = Arrays.asList ("Shark", "Panda", "Armadillo"); String animalString = awesomeAnimals.stream (). Collect (Collectors.joining (",")); assertEquals ("Shark, Panda, Armadillo", animalString);

Používaním streamov sa odblokujú všetky funkcie spojené s Java 8 Prúd API, ako je filtrovanie, mapovanie, iterácia a ďalšie.

8. Zabaliť

V tomto článku sme prijali a hlboko sa ponorte do množstva tried a metód používaných na zreťazenie Strunyv jazyku Java.

Ako vždy, zdrojový kód je k dispozícii na GitHub.