Pridružite se nizu primitiva s separatorom na Javi

1. Uvod

U ovom brzom vodiču naučit ćemo kako pridružiti niz primitiva s jednoznakovnim separatorom u Javi. Za naše primjere razmotrit ćemo dva polja: niz od int i niz od ugljen.

2. Definiranje problema

Počnimo s definiranjem niza od int i niz od ugljen za primjere, kao i znak za razdvajanje koji ćemo upotrijebiti za spajanje njihovog sadržaja:

int [] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9}; char [] charArray = {'a', 'b', 'c', 'd', 'e', ​​'f'}; char separatorChar = '-'; String separator = String.valueOf (separatorChar); 

Imajte na umu da smo uključili oba a ugljen i Niz separator od neke od metoda koje ćemo prikazati zahtijevaju a ugljen argument, dok drugi zahtijevaju a Niz argument.

Sadržati će rezultati operacije spajanja “1-2-3-4-5-6-7-8-9” za int niz i "a B C D E F" za ugljen niz.

3. Kolekcionari.joining ()

Počnimo s jednom od dostupnih metoda iz API-ja Java 8 Stream - Kolekcionari.joining ().

Prvo stvorimo a Stream iz niza primitiva pomoću Nizovi.stream () metoda pronađena u java.util paket. Dalje mapiramo svaki element na Niz. I na kraju, spajamo elemente s našim zadanim separatorom.

Počnimo s našim int niz:

Pridruženi niz = Arrays.stream (intArray) .mapToObj (String :: valueOf) .collect (Collectors.joining (separator));

Pri pridruživanju našem ugljen nizom s ovom metodom, prvo moramo omotati ugljen niz u CharBuffer a zatim ga projicirati na ugljen opet. To je zato što znakovi () metoda vraća a Stream od int vrijednosti.

Nažalost, Java Stream API ne nudi izvornu metodu za umotavanje a Stream od ugljen.

Pridružimo se našem ugljen niz:

Pridruženi niz = CharBuffer.wrap (charArray) .chars () .mapToObj (intValue -> String.valueOf ((char) intValue)) .collect (Collectors.joining (separator));

4. StringJoiner

Slično kao Kolekcionari.joining (), ovaj pristup koristi Stream API, ali umjesto prikupljanja elemenata, on se prevlači kroz elemente i dodaje ih u StringJoiner primjer:

StringJoiner intStringJoiner = novi StringJoiner (separator); Arrays.stream (intArray) .mapToObj (String :: valueOf) .forEach (intStringJoiner :: add); Niz pridružen = intStringJoiner.toString ();

Opet, moramo svoje zamotati ugljen niz u CharBuffer kada koristite Stream API:

StringJoiner charStringJoiner = novi StringJoiner (separator); CharBuffer.wrap (charArray) .chars () .mapToObj (intChar -> String.valueOf ((char) intChar)) .forEach (charStringJoiner :: add); Niz pridružen = charStringJoiner.toString ();

5. Apache Commons Lang

Biblioteka Apache Commons Lang pruža neke korisne metode u StringUtils i ArrayUtils klase koje možemo koristiti za spajanje naših primitivnih nizova.

Da bismo koristili ovu knjižnicu, morat ćemo dodati commons-lang3 ovisnost o našoj pom.xml:

 org.apache.commons commons-lang3 3.8.1 

Pri radu s a Niz separator, iskoristit ćemo oboje StringUtils i ArrayUtils.

Upotrijebimo ih zajedno da se pridružimo našem int niz:

Pridruženi niz = StringUtils.join (ArrayUtils.toObject (intArray), separator);

Ili, ako koristimo primitiv ugljen tipa kao separator, možemo jednostavno napisati:

Pridruženi niz = StringUtils.join (intArray, separatorChar);

Implementacije za pridruživanje našem ugljen niz su prilično slični:

Pridruženi niz = StringUtils.join (ArrayUtils.toObject (charArray), separator);

A kada koristite a ugljen separator:

Pridruženi niz = StringUtils.join (charArray, separatorChar);

6. Guava

Googleova knjižnica Guava nudi Stolar klase koju možemo koristiti za pridruživanje našim nizovima. Da bismo koristili Guavu u našem projektu, morat ćemo dodati guava Ovisnost o Mavenu:

 com.google.guava guava 27.0.1-jre 

Pridružimo se našem int niz pomoću Stolar razred:

String joined = Joiner.on (separator) .join (Ints.asList (intArray));

U ovom smo primjeru također koristili Ints.asList () metoda iz Guave, koja lijepo transformira niz primitiva u Popis od Cijeli broj.

Guava nudi sličnu metodu za pretvaranje a ugljen niz do a Popis od Lik. Kao rezultat toga, pridruživanje našem ugljen polje izgleda vrlo poput gornjeg primjera koji je koristio int niz:

String joined = Joiner.on (separator) .join (Chars.asList (charArray));

7. StringBuilder

Konačno, ako ne možemo koristiti Java 8 ili biblioteke trećih strana, možemo ručno pridružiti niz elemenata pomoću StringBuilder. U ovom je slučaju implementacija identična za obje vrste nizova:

if (array.length == 0) {return ""; } StringBuilder stringBuilder = novi StringBuilder (); za (int i = 0; i <niz.duljina - 1; i ++) {stringBuilder.append (niz [i]); stringBuilder.append (separator); } stringBuilder.append (niz [niz.duljina - 1]); Niz pridružen = stringBuilder.toString ();

8. Zaključak

Ovaj kratki članak ilustrira nekoliko načina spajanja niza primitiva s danim znakom ili nizom razdvajača. Pokazali smo primjere korištenja izvornih JDK rješenja, kao i dodatna rješenja pomoću dvije biblioteke treće strane - Apache Commons Lang i Guava.

Kao i uvijek, cjeloviti kôd korišten u ovom članku dostupan je na GitHubu.