Pripojte sa k skupine primitívov so separátorom v Jave

1. Úvod

V tejto rýchlej príručke sa dozvieme, ako na to spojiť pole primitívov s jednoznakovým oddeľovačom v Jave. Pre naše príklady zvážime dve polia: pole int a pole char.

2. Definovanie problému

Začnime definovaním poľa int a pole char pre príklady, ako aj znak oddeľovača, ktorý použijeme na spojenie ich obsahu:

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

Upozorňujeme, že sme zahrnuli obidve a char a String oddeľovač od niektoré z metód, ktoré ukážeme, vyžadujú char argument, zatiaľ čo iné vyžadujú a String argument.

Výsledky operácie spojenia budú obsahovať “1-2-3-4-5-6-7-8-9” pre int pole a "A b c d e f" pre char pole.

3. Collectors.joining ()

Začnime s jednou z dostupných metód z Java 8 Stream API - Collectors.joining ().

Najskôr vytvoríme a Prúd z radu primitívov pomocou Arrays.stream () metóda nájdená v java.util balíček. Ďalej každý prvok mapujeme na String. A nakoniec spojíme prvky s našim daným oddeľovačom.

Začnime s našimi int pole:

Reťazec spojený = Arrays.stream (intArray) .mapToObj (String :: valueOf) .collect (Collectors.joining (separator));

Pri vstupe do našej char pole s touto metódou, musíme najskôr zabaliť char pole do CharBuffer a potom to premietnuť na char ešte raz. Je to preto, lebo znaky () metóda vracia a Prúd z int hodnoty.

Rozhranie Java Stream API bohužiaľ neposkytuje natívnu metódu na zabalenie súboru a Prúd z char.

Pripojme sa k nášmu char pole:

Pripojený reťazec = CharBuffer.wrap (charArray) .chars () .mapToObj (intValue -> String.valueOf ((char) intValue)) .collect (Collectors.joining (separator));

4. StringJoiner

Podobne ako Collectors.joining (), tento prístup využíva Stream API, ale namiesto zhromažďovania prvkov iteruje cez prvky a pridáva ich do a StringJoiner inštancia:

StringJoiner intStringJoiner = nový StringJoiner (oddeľovač); Arrays.stream (intArray) .mapToObj (String :: valueOf) .forEach (intStringJoiner :: add); Reťazec spojený = intStringJoiner.toString ();

Opäť musíme zabaliť svoje char pole do CharBuffer pri použití Stream API:

StringJoiner charStringJoiner = nový StringJoiner (oddeľovač); CharBuffer.wrap (charArray) .chars () .mapToObj (intChar -> String.valueOf ((char) intChar)) .forEach (charStringJoiner :: add); Reťazec spojený = charStringJoiner.toString ();

5. Apache Commons Lang

Knižnica Apache Commons Lang poskytuje niektoré užitočné metódy v StringUtils a ArrayUtils triedy, ktoré môžeme použiť na pripojenie sa k našim primitívnym poliam.

Ak chcete používať túto knižnicu, budeme musieť pridať commons-lang3 závislosť na našom pom.xml:

 org.apache.commons commons-lang3 3.8.1 

Pri práci s a String oddeľovač, využijeme obe StringUtils a ArrayUtils.

Použime ich spolu, aby sme sa pripojili k našim int pole:

Reťazec spojený = StringUtils.join (ArrayUtils.toObject (intArray), oddeľovač);

Alebo, ak používame primitívu char zadajte ako oddeľovač, môžeme jednoducho napísať:

Reťazec spojený = StringUtils.join (intArray, separatorChar);

Implementácie pre pripojenie sa k nášmu char pole sú si dosť podobné:

Reťazec spojený = StringUtils.join (ArrayUtils.toObject (charArray), oddeľovač);

A pri použití a char oddeľovač:

Reťazec spojený = StringUtils.join (charArray, separatorChar);

6. Guava

Knižnica Guava spoločnosti Google poskytuje Stolár triedy, ktorú môžeme použiť na pripojenie sa k našim poliam. Ak chcete použiť Guava v našom projekte, budeme musieť pridať guava Závislosť Maven:

 com.google.guava guava 27.0.1-jre 

Pripojme sa k nášmu int pole pomocou Stolár trieda:

Reťazec spojený = Joiner.on (oddeľovač) .join (Ints.asList (intArray));

V tomto príklade sme použili aj znak Ints.asList () metóda od Guavy, ktorá pekne transformuje pole primitívov na a Zoznam z Celé číslo.

Guava ponúka podobnú metódu na prevod a char pole do a Zoznam z Postava. Výsledkom je, že sa pripojil k nášmu char pole vyzerá veľmi podobne ako vyššie uvedený príklad, ktorý používal int pole:

Reťazec spojený = Joiner.on (oddeľovač) .join (Chars.asList (charArray));

7. StringBuilder

Nakoniec Ak nemôžeme používať knižnice Java 8 ani knižnice tretích strán, môžeme k nim ručne spojiť pole prvkov StringBuilder. V tomto prípade je implementácia rovnaká pre oba typy polí:

if (array.length == 0) {return ""; } StringBuilder stringBuilder = nový StringBuilder (); pre (int i = 0; i <pole.length - 1; i ++) {stringBuilder.append (pole [i]); stringBuilder.append (oddeľovač); } stringBuilder.append (pole [pole.length - 1]); Reťazec spojený = stringBuilder.toString ();

8. Záver

Tento rýchly článok ilustruje množstvo spôsobov, ako spojiť pole primitívov s daným oddeľovacím znakom alebo reťazcom. Ukázali sme príklady využívajúce natívne riešenia JDK, ako aj ďalšie riešenia využívajúce dve knižnice tretích strán - Apache Commons Lang a Guava.

Úplný kód použitý v tomto článku je ako vždy k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found