Deltag i Array of Primitives med Separator i Java

1. Introduktion

I denne hurtige vejledning lærer vi, hvordan vi gør det slutte sig til en række primitiver med en enkelt tegnseparator i Java. For vores eksempler overvejer vi to arrays: en matrix af int og en række char.

2. Definition af problemet

Lad os starte med at definere en matrix af int og en række char til eksemplerne såvel som det skilletegn, vi bruger til at slutte sig til deres indhold:

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

Bemærk, at vi har inkluderet begge a char og Snor separator siden nogle af de metoder, vi viser, kræver en char argument, mens andre kræver en Snor argument.

Resultaterne af tilslutningsoperationen vil indeholde “1-2-3-4-5-6-7-8-9” til int array og “A-b-c-d-e-f” til char array.

3. Collectors.joining ()

Lad os starte med en af ​​de tilgængelige metoder fra Java 8 Stream API - Collectors.joining ().

Først opretter vi en Strøm fra en række primitiver, der bruger Arrays.stream () metode, der findes i java.util pakke. Dernæst kortlægger vi hvert element til Snor. Og til sidst sammenkæder vi elementerne med vores givne separator.

Lad os begynde med vores int matrix:

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

Når du tilmelder os vores char array med denne metode, skal vi først pakke char række ind i CharBuffer og derefter projicere den til char igen. Dette skyldes, at tegn () metode returnerer a Strøm af int værdier.

Desværre giver Java Stream API ikke en native metode til indpakning af en Strøm af char.

Lad os slutte os til vores char matrix:

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

4. StringJoiner

På samme måde som Collectors.joining (), denne fremgangsmåde gør brug af Stream API, men i stedet for at indsamle elementer, gentages det gennem elementer og føjer dem til en StringJoiner eksempel:

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

Igen er vi nødt til at pakke vores char række ind i CharBuffer når du bruger 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 indeholder nogle praktiske metoder i StringUtils og ArrayUtils klasser, som vi kan bruge til at slutte os til vores primitive arrays.

For at bruge dette bibliotek skal vi tilføje commons-lang3 afhængighed af vores pom.xml:

 org.apache.commons commons-lang3 3.8.1 

Når du arbejder med en Snor separator, vi bruger begge dele StringUtils og ArrayUtils.

Lad os bruge disse sammen til at slutte sig til vores int matrix:

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

Eller hvis vi bruger en primitiv char skriv som en separator, kan vi bare skrive:

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

Implementeringerne for at deltage i vores char array er ret ens:

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

Og når du bruger en char separator:

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

6. Guava

Googles Guava-bibliotek leverer Snedker klasse, som vi kan bruge til at deltage i vores arrays. For at bruge Guava i vores projekt skal vi tilføje guava Maven afhængighed:

 com.google.guava guava 27.0.1-jre 

Lad os slutte os til vores int array ved hjælp af Snedker klasse:

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

I dette eksempel brugte vi også Ints.asList () metode fra Guava, som pænt omdanner arrayet af primitiver til en Liste af Heltal.

Guava tilbyder en lignende metode til konvertering af en char array til en Liste af Karakter. Som et resultat, at deltage i vores char array ligner meget det ovenstående eksempel, der brugte int matrix:

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

7. StringBuilder

Langt om længe, hvis vi ikke kan bruge hverken Java 8 eller tredjepartsbiblioteker, kan vi manuelt forbinde en række elementer med StringBuilder. I dette tilfælde er implementeringen identisk for begge typer arrays:

hvis (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. Konklusion

Denne hurtige artikel illustrerer en række måder at slutte sig til en række primitiver med et givet skilletegn eller streng. Vi viste eksempler ved hjælp af indfødte JDK-løsninger samt yderligere løsninger ved hjælp af to tredjepartsbiblioteker - Apache Commons Lang og Guava.

Som altid er den komplette kode, der bruges i denne artikel, tilgængelig på GitHub.


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