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.