Bli med Array of Primitives with Separator i Java

1. Introduksjon

I denne raske opplæringen lærer vi hvordan du gjør det bli med i en rekke primitiver med en tegnseparator i Java. For eksemplene våre vil vi vurdere to matriser: en rekke int og en rekke røye.

2. Definere problemet

La oss starte med å definere en rekke int og en rekke røye for eksemplene, så vel som skilletegnet vi bruker for å bli med på innholdet:

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); 

Merk at vi har tatt med begge a røye og String separator siden noen av metodene vi viser krever en røye argument, mens andre krever en String argument.

Resultatene av sammenføyningsoperasjonen vil inneholde “1-2-3-4-5-6-7-8-9” for int array, og "A B C D E F" for røye array.

3. Collectors.joining ()

La oss starte med en av de tilgjengelige metodene fra Java 8 Stream API - Collectors.joining ().

Først lager vi en Strøm fra en rekke primitiver som bruker Arrays.stream () metoden funnet i java.util pakke. Deretter tilordner vi hvert element til String. Og til slutt sammenkobler vi elementene med vår gitte separator.

La oss begynne med vår int matrise:

String joined = Arrays.stream (intArray) .mapToObj (String :: valueOf) .collect (Collectors.joining (separator));

Når du blir med på vår røye array med denne metoden, må vi først pakke inn røye rekke inn i CharBuffer og projiser den deretter til røye en gang til. Dette er fordi tegn () metoden returnerer a Strøm av int verdier.

Dessverre gir Java Stream API ikke en innfødt metode for innpakning av en Strøm av røye.

La oss bli med vår røye matrise:

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

4. StringJoiner

På samme måte som Collectors.joining (), denne tilnærmingen bruker Stream API, men i stedet for å samle inn elementer, går det gjennom elementer og legger dem til en StringJoiner forekomst:

StringJoiner intStringJoiner = ny StringJoiner (separator); Arrays.stream (intArray) .mapToObj (String :: valueOf) .forEach (intStringJoiner :: add); String joined = intStringJoiner.toString ();

Igjen, vi må pakke inn røye rekke inn i CharBuffer når du bruker Stream API:

StringJoiner charStringJoiner = ny StringJoiner (separator); CharBuffer.wrap (charArray) .chars () .mapToObj (intChar -> String.valueOf ((char) intChar)) .forEach (charStringJoiner :: add); String joined = charStringJoiner.toString ();

5. Apache Commons Lang

Apache Commons Lang-biblioteket gir noen nyttige metoder i StringUtils og ArrayUtils klasser som vi kan bruke til å bli med i våre primitive matriser.

For å bruke dette biblioteket, må vi legge til commons-lang3 avhengighet til vår pom.xml:

 org.apache.commons commons-lang3 3.8.1 

Når du arbeider med en String separator, bruker vi begge deler StringUtils og ArrayUtils.

La oss bruke disse sammen for å bli med int matrise:

String joined = StringUtils.join (ArrayUtils.toObject (intArray), separator);

Eller hvis vi bruker en primitiv røye skriv som separator, kan vi ganske enkelt skrive:

String joined = StringUtils.join (intArray, separatorChar);

Implementeringene for å bli med på vår røye array er ganske like:

String joined = StringUtils.join (ArrayUtils.toObject (charArray), separator);

Og når du bruker en røye skilletegn:

String joined = StringUtils.join (charArray, separatorChar);

6. Guava

Googles Guava-bibliotek tilbyr Snekker klasse som vi kan bruke til å bli med i arrangementene våre. For å bruke Guava i prosjektet vårt, må vi legge til guava Maven avhengighet:

 com.google.guava guava 27.0.1-jre 

La oss bli med vår int array ved hjelp av Snekker klasse:

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

I dette eksemplet brukte vi også Ints.asList () metode fra Guava, som pent forvandler en rekke primitiver til en Liste av Heltall.

Guava tilbyr en lignende metode for å konvertere en røye array til en Liste av Karakter. Som et resultat, bli med i vår røye array ser veldig ut som eksemplet ovenfor som brukte int matrise:

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

7. StringBuilder

Endelig, Hvis vi ikke kan bruke Java 8 eller tredjepartsbiblioteker, kan vi manuelt bli med i en rekke elementer med StringBuilder. I dette tilfellet er implementeringen identisk for begge typer matriser:

if (array.length == 0) {return ""; } StringBuilder stringBuilder = ny StringBuilder (); for (int i = 0; i <array.length - 1; i ++) {stringBuilder.append (array [i]); stringBuilder.append (separator); } stringBuilder.append (array [array.length - 1]); String joined = stringBuilder.toString ();

8. Konklusjon

Denne raske artikkelen illustrerer en rekke måter å bli med i en rekke primitiver med et gitt skilletegn eller streng. Vi viste eksempler ved bruk av innfødte JDK-løsninger, samt tilleggsløsninger ved bruk av to tredjepartsbiblioteker - Apache Commons Lang og Guava.

Som alltid er den komplette koden som brukes i denne artikkelen tilgjengelig på GitHub.


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