Spajanje nizova u Javi

1. Uvod

Java nudi znatan broj metoda i klasa posvećenih spajanje Žice.

U ovom uputstvu zaronit ćemo i u nekoliko njih iznesite neke uobičajene zamke i loše prakse.

2. StringBuilder

Prvo su skromni StringBuilder. Ovaj sat pruža niz od Niz-građevinske komunalije to olakšava posao Niz manipulacija.

Izgradimo brzi primjer Niz spajanje pomoću StringBuilder razred:

StringBuilder stringBuilder = novi StringBuilder (100); stringBuilder.append ("Baeldung"); stringBuilder.append ("je"); stringBuilder.append ("super"); assertEquals ("Baeldung je sjajan", stringBuilder.toString ());

Interno, StringBuilder održava promjenjiv niz znakova. U našem uzorku koda proglasili smo da ovo ima početna veličina 100 kroz StringBuilder konstruktor. Zbog ove izjave o veličini, StringBuilder može biti vrlo učinkovitnačin spajanja Žice.

Također je vrijedno napomenuti da StringBuffer class je sinkronizirana verzija StringBuilder.

Iako je sinkronizacija često sinonim za sigurnost niti, zbog toga se ne preporučuje uporaba u višenitnim aplikacijama StringBuffer's uzorak graditelja. Iako su pojedinačni pozivi sinkronizirane metode zaštićeni niti, višestruki pozivi nisu.

3. Operater sabiranja

Sljedeći je operator zbrajanja (+). To je isti operator koji rezultira zbrajanjem brojeva i jest preopterećen za spajanje kada se primijeni na Žice.

Pogledajmo na brzinu kako to funkcionira:

String myString = "The" + "quick" + "brown" + "lisica ..."; assertEquals ("Brza smeđa lisica ...", myString);

Na prvi pogled ovo može izgledati puno sažetije od StringBuilder opcija. Međutim, kada se izvorni kod kompajlira, simbol + prevodi u lance StringBuilder.append () poziva. Zbog ovoga, miješajući StringBuilder i + metoda spajanja je smatra lošom praksom.

Dodatno, Niz treba izbjegavati spajanje pomoću + operatora unutar petlje. Budući da je Niz objekt je nepromjenjiv, svaki poziv za spajanje rezultirat će novim Niz objekt koji se stvara.

4. Niz Metode

The Niz klasa sama pruža čitav niz metoda za spajanje Žice.

4.1. String.concat

Ne iznenađuje što String.concat metoda je naša prva luka poziva pri pokušaju spajanja Niz predmeta. Ova metoda vraća a Niz objekt, pa je povezivanje metode korisna značajka.

Niz myString = "Oboje" .concat ("nestalno") .concat ("patuljci") .concat ("jinx") .concat ("moj") .concat ("svinja") .concat ("kviz"); assertEquals ("Oba nestalna patuljka zbijaju moj kviz", myString);

U ovom primjeru naš lanac započinje s Niz doslovno, konkat metoda nam zatim omogućuje da lance poziva koji se dodaju dalje Žice.

4.2. String.format

Sljedeće je String.format metoda koja nam omogućuje ubrizgavanje raznih Java Predmeti u a Niz predložak.

The String.format potpis metode uzima a singl Niz označavajući naš predložak. Ovaj Predložak sadrži znakove '%' koji predstavljaju gdje su različiti Predmetitreba postaviti unutar.

Jednom kada je naš predložak deklariran, onda je uzima varargs Objekt niz koji se ubrizgava u predložak.

Pogledajmo kako ovo funkcionira na brzom primjeru:

String myString = String.format ("% s% s% .2f% s% s,% s ...", "I", "jeo", 2.5056302, "borovnica", "pita", "ups"); assertEquals ("Pojeo sam 2,51 pita od borovnice, ups ...", myString);

Kao što vidimo gore, metoda je ubrizgala naš Žice u ispravan format.

4.3. String.priključiti se (Java 8+)

Ako je naša aplikacija je pokrenuta na Javi 8ili iznad, možemo iskoristiti String.priključiti se metoda. S ovim možemo pridruži se nizu od Žice sa zajedničkim graničnikom, osiguravajući da se ne propuste razmaci.

String [] stringovi = {"Ja sam", "trčim", "out", "of", "pangrams!"}; String myString = String.join ("", žice); assertEquals ("Ponestaje mi pangrama!", myString); 

Velika je prednost ove metode što se ne morate brinuti zbog graničnika između naših žica.

5. StringJoiner (Java 8+)

StringJoiner sažetak svih String.priključiti se funkcionalnost u jednostavnu klasu. The konstruktor uzima graničnik, s neobaveznim prefiksom i sufiksom. Možemo se dodati Žice koristeći dobro imenovane dodati metoda.

StringJoiner fruitJoiner = novi StringJoiner (","); fruitJoiner.add ("Jabuke"); fruitJoiner.add ("Naranče"); fruitJoiner.add ("Banane"); assertEquals ("Jabuke, naranče, banane", fruitJoiner.toString ());

Korištenjem ove klase, umjesto String.priključiti se metoda, možemo dodati Žice kako se program izvodi; Nema potrebe prvo stvoriti niz!

Krenite na naš članak o StringJoiner za više informacija i primjere.

6. Nizovi.toString

Na temu nizova, Polje razred također sadrži zgodan toString metoda koja lijepo formatira niz objekata. The Nizovi.toString metoda također poziva toString metoda bilo kojeg zatvorenog objekta - pa moramo osigurati da imamo definiranu.

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

Nažalost, Nizovi.toString metoda nije prilagodljiva i jedina izlazi a Niz uokvirene u uglate zagrade.

7. Kolekcionari.druživanje (Java 8+)

Na kraju, pogledajmo Kolekcionari.druživanje metoda koja omogućuje nam lijevanje izlaza a Stream u jedinstvenu Niz.

Popis awesomeAnimals = Arrays.asList ("Morski pas", "Panda", "Armadillo"); Niz animalString = awesomeAnimals.stream (). Collect (Collectors.joining (",")); assertEquals ("Morski pas, Panda, Armadillo", animalString);

Korištenje streamova otključava sve funkcije povezane s Java 8 Stream API, poput filtriranja, mapiranja, ponavljanja i još mnogo toga.

8. Zamotajte

U ovom smo članku uzeli duboko zaroniti u mnoštvo klasa i metoda koje se koriste za spajanje Žicena jeziku Java.

Kao i uvijek, izvorni kod dostupan je na GitHub-u.