Sammenkædning af strenge i Java

1. Introduktion

Java tilbyder et betydeligt antal metoder og klasser dedikeret til sammenkædning Strenge.

I denne vejledning dykker vi ind i flere af dem så godt som skitsere nogle almindelige faldgruber og dårlig praksis.

2. StringBuilder

Først op er den ydmyge StringBuilder. Denne klasse giver en række Snor-bygningsværktøjer der gør det let at arbejde med Snor manipulation.

Lad os bygge et hurtigt eksempel på Snor sammenkædning ved hjælp af StringBuilder klasse:

StringBuilder stringBuilder = ny StringBuilder (100); stringBuilder.append ("Baeldung"); stringBuilder.append ("er"); stringBuilder.append ("fantastisk"); assertEquals ("Baeldung er fantastisk", stringBuilder.toString ());

Internt, StringBuilder opretholder en ændret række af tegn. I vores kodeeksempel har vi erklæret, at dette har en oprindelig størrelse på 100 gennem StringBuilder konstruktør. På grund af denne størrelseserklæring er StringBuilder kan være en meget effektivmåde at sammenkæde Strenge.

Det er også værd at bemærke, at StringBuffer klasse er den synkroniserede version af StringBuilder.

Selvom synkronisering ofte er synonymt med trådsikkerhed, anbefales det ikke til brug i multitrådede applikationer pga StringBuffer bygmønster. Mens individuelle opkald til en synkroniseret metode er trådsikre, er flere opkald ikke.

3. Tilføjelsesoperatør

Dernæst er tilføjelsesoperatoren (+). Dette er den samme operator, der resulterer i tilføjelse af tal og er overbelastet til sammenkædning, når den anvendes til Strenge.

Lad os se hurtigt på, hvordan dette fungerer:

String myString = "Den" + "hurtige" + "brune" + "ræven ..."; assertEquals ("Den hurtige brune ræv ...", myString);

Ved første øjekast kan dette virke meget mere kortfattet end StringBuilder mulighed. Når kildekoden kompileres, + symbolet oversættes til kæder af StringBuilder.append () opkald. På grund af dette, blanding af StringBuilder og + metode af sammenkædning er betragtes som dårlig praksis.

Derudover Snor sammenkædning ved hjælp af + -operatoren inden for en sløjfe bør undgås. Siden den Snor objekt er uforanderligt, vil hvert opkald til sammenkædning resultere i et nyt Snor objekt oprettes.

4. Snor Metoder

Det Snor klassen selv giver en lang række metoder til sammenkædning Strenge.

4.1. String.concat

Det er ikke overraskende, at String.concat metode er vores første anløbshavn, når vi forsøger at sammenkæde Snor genstande. Denne metode returnerer a Snor objekt, så sammenkædning af metoden er en nyttig funktion.

String myString = "Begge" .concat ("ustabile") .concat ("dværge") .concat ("jinx") .concat ("min") .concat ("gris") .concat ("quiz"); assertEquals ("Begge ustabile dværge jinx min grisequiz", myString);

I dette eksempel startes vores kæde med en Snor bogstavelig, den konkat Metoden giver os derefter mulighed for at kæde opkaldene for at tilføje yderligere Strenge.

4.2. Streng.format

Næste op er Streng.format metode, som giver os mulighed for at indsprøjte en række Java Objekter ind i en Snor skabelon.

Det Streng.format metodesignatur tager en enkelt Snor betegner vores skabelon. Det her skabelonen indeholder '%' tegn til at repræsentere hvor de forskellige Objekterskal placeres inden i det.

Når vores skabelon er erklæret, er det derefter tager en varargs Objekt array, der injiceres ind i skabelonen.

Lad os se, hvordan dette fungerer med et hurtigt eksempel:

String myString = String.format ("% s% s% .2f% s% s,% s ...", "I", "ate", 2.5056302, "blåbær", "tærter", "oops"); assertEquals ("Jeg spiste 2,51 blåbær tærter, oops ...", myString);

Som vi kan se ovenfor, har metoden injiceret vores Strenge i det korrekte format.

4.3. String. Slutte sig til (Java 8+)

Hvis vores applikationen kører på Java 8eller over, kan vi drage fordel af String. Slutte sig til metode. Med dette kan vi slutte sig til en række Strenge med en fælles afgrænser, så der ikke går glip af mellemrum.

String [] strings = {"I'm", "running", "out", "of", "pangrams!"}; String myString = String.join ("", strings); assertEquals ("Jeg løber tør for pangrams!", myString); 

En kæmpe fordel ved denne metode er ikke at skulle bekymre sig om afgrænsningen mellem vores strenge.

5. StringJoiner (Java 8+)

StringJoiner abstracts alle de String. Slutte sig til funktionalitet til en brugervenlig klasse. Det konstruktør tager en afgrænser med et valgfrit præfiks og suffiks. Vi kan tilføje Strenge ved hjælp af velkendte tilføje metode.

StringJoiner fruitJoiner = ny StringJoiner (","); fruitJoiner.add ("Æbler"); fruitJoiner.add ("Appelsiner"); fruitJoiner.add ("Bananer"); assertEquals ("Æbler, appelsiner, bananer", fruitJoiner.toString ());

Ved at bruge denne klasse i stedet for String. Slutte sig til metode, vi kan tilføje Strenge som programmet kører; Det er ikke nødvendigt at oprette arrayet først!

Gå over til vores artikel om StringJoiner for mere information og eksempler.

6. Arrays.toString

Om emnet for arrays, Array klasse indeholder også en praktisk toString metode, der pænt formaterer en række objekter. Det Arrays.toString metoden kalder også toString metode til ethvert lukket objekt - så vi skal sikre, at vi har en defineret.

String [] myFavouriteLanguages ​​= {"Java", "JavaScript", "Python"}; String toString = Arrays.toString (myFavouriteLanguages); assertEquals ("[Java, JavaScript, Python]", toString);

Desværre er Arrays.toString metoden kan ikke tilpasses og kun udgange a Snor indkapslet i firkantede parenteser.

7. Samlere. Tilslutter sig (Java 8+)

Lad os endelig se på Samlere. Tilslutter sig metode, som giver os mulighed for at trække output af en Strøm ind i en enkelt Snor.

Liste awesomeAnimals = Arrays.asList ("Shark", "Panda", "Armadillo"); String animalString = awesomeAnimals.stream (). Collect (Collectors.joining (",")); assertEquals ("Shark, Panda, Armadillo", animalString);

Brug af streams låser al funktionalitet, der er knyttet til Java 8, op Strøm API, såsom filtrering, kortlægning, iterering og mere.

8. Pak ind

I denne artikel har vi taget en dybt dybe ned i de mange klasser og metoder, der bruges til sammenkædning Strengepå Java-sproget.

Som altid er kildekoden tilgængelig på GitHub.