Csatlakozzon a Primitívek tömbjéhez a Java elválasztóval

1. Bemutatkozás

Ebben a gyors bemutatóban megtanuljuk, hogyan kell csatlakozzon egy primitív tömbhöz egykarakteres elválasztóval a Java-ban. Példáinknak két tömböt veszünk figyelembe: a int és egy tömbje char.

2. A probléma meghatározása

Kezdjük azzal, hogy definiálunk egy tömböt int és egy tömbje char a példákhoz, valamint az elválasztó karakterhez, amelyet a tartalmuk összekapcsolására használunk:

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

Vegye figyelembe, hogy mindkettőt belefoglaltuk a char és Húr elválasztó óta néhány módszer, amelyet bemutatunk, megköveteli a char érv, míg mások megkövetelik a Húr érv.

A csatlakozási művelet eredményei tartalmazzák “1-2-3-4-5-6-7-8-9” a int tömb, és „A-b-c-d-e-f” a char sor.

3. Collectors.joining ()

Kezdjük a Java 8 Stream API egyik elérhető módszerével - Collectors.joining ().

Először létrehozunk egy Folyam a primitívek tömbjéből a Tömbök.stream () módszer található a java.util csomag. Ezután minden elemet feltérképezünk Húr. És végül összefűzzük az elemeket a megadott elválasztónkkal.

Kezdjük a mi int sor:

Karaktersorozat = Arrays.stream (intArray) .mapToObj (String :: valueOf) .collect (Collectors.joining (elválasztó));

Amikor csatlakozik a mi char tömböt ezzel a módszerrel, először be kell csomagolnunk a char tömb be CharBuffer majd kivetíti char újra. Ez azért van, mert a karakterek () metódus a Folyam nak,-nek int értékek.

Sajnos a Java Stream API nem nyújt natív módszert az a csomagolására Folyam nak,-nek char.

Csatlakozzunk a mi char sor:

Karaktersorozat = CharBuffer.wrap (charArray) .chars () .mapToObj (intValue -> String.valueOf ((char) intValue)) .collect (Collectors.joining (elválasztó));

4. StringJoiner

Hasonlóan Collectors.joining (), ez a megközelítés a Stream API-t használja, de az elemek gyűjtése helyett az elemeken keresztül iterál, és hozzáadja azokat az a StringJoiner példa:

StringJoiner intStringJoiner = új StringJoiner (elválasztó); Tömbök.stream (intArray) .mapToObj (String :: valueOf) .forEach (intStringJoiner :: add); Karakterlánc csatlakozott = intStringJoiner.toString ();

Ismét be kell csomagolnunk char tömb be CharBuffer a Stream API használatakor:

StringJoiner charStringJoiner = új StringJoiner (elválasztó); CharBuffer.wrap (charArray) .chars () .mapToObj (intChar -> String.valueOf ((char) intChar)) .forEach (charStringJoiner :: add); Karakterlánc csatlakozott = charStringJoiner.toString ();

5. Apache Commons Lang

Az Apache Commons Lang könyvtár néhány praktikus módszert kínál a StringUtils és ArrayUtils osztályok, amelyekkel csatlakozhatunk primitív tömbjeinkhez.

A könyvtár használatához hozzá kell adnunk a commons-lang3 függőség a mi pom.xml:

 org.apache.commons commons-lang3 3.8.1 

Amikor a Húr elválasztó, mindkettőt felhasználjuk StringUtils és ArrayUtils.

Használjuk ezeket együtt, hogy csatlakozzunk int sor:

Karakterlánc csatlakozott = StringUtils.join (ArrayUtils.toObject (intArray), elválasztó);

Vagy ha primitívet használunk char írja be elválasztóként, egyszerűen írhatunk:

Karakterlánc csatlakozott = StringUtils.join (intArray, separatorChar);

A megvalósítások a csatlakozáshoz char tömb meglehetősen hasonló:

Karakterlánc csatlakozott = StringUtils.join (ArrayUtils.toObject (charArray), elválasztó);

És amikor a char szétválasztó:

Karakterlánc csatlakozott = StringUtils.join (charArray, separatorChar);

6. Guava

A Google Guava könyvtárában található Asztalos osztály, amellyel csatlakozhatunk tömbjeinkhez. A projektben a Guava használatához hozzá kell adnunk a gujávafa Maven-függőség:

 com.google.guava guava 27.0.1-jre 

Csatlakozzunk a mi int tömb a Asztalos osztály:

Karakterlánc csatlakozott = Joiner.on (elválasztó) .join (Ints.asList (intArray));

Ebben a példában a Ints.asList () Guava-i módszer, amely szépen átalakítja a primitívek tömbjét a Lista nak,-nek Egész szám.

Guava hasonló módszert kínál a char tömb a Lista nak,-nek Karakter. Ennek eredményeként csatlakozik a mi char tömb nagyon hasonlít a fenti példához, amely a int sor:

A karakterlánc csatlakozott = Joiner.on (elválasztó) .join (Chars.asList (charArray));

7. StringBuilder

Végül, ha nem használhatunk sem Java 8, sem harmadik fél könyvtárakat, manuálisan egyesíthetünk egy tömb elemet a StringBuilder. Ebben az esetben a megvalósítás mindkét tömbtípusra megegyezik:

if (tömb.hossz == 0) {return ""; } StringBuilder stringBuilder = new StringBuilder (); for (int i = 0; i <tömb.hossz - 1; i ++) {stringBuilder.append (tömb [i]); stringBuilder.append (elválasztó); } stringBuilder.append (tömb [tömbhossz - 1]); Karakterlánc csatlakozott = stringBuilder.toString ();

8. Következtetés

Ez a rövid cikk számos módszert mutat be egy primitív tömb egyesítéséhez egy adott elválasztó karakterrel vagy húrral. Mutattunk példákat natív JDK megoldásokkal, valamint további megoldásokat két harmadik fél könyvtárával - az Apache Commons Lang és a Guava -.

Mint mindig, a cikkben használt teljes kód elérhető a GitHubon.


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