Sammankoppla strängar i Java

1. Introduktion

Java tillhandahåller ett stort antal metoder och klasser för att sammanfoga strängar.

I den här handledningen kommer vi att dyka in i flera av dem samt beskriva några vanliga fallgropar och dåliga metoder.

2. StringBuilder

Först är den ödmjuka StringBuilder. Denna klass tillhandahåller en rad sträng- bygga verktyg som gör det enkelt att String manipulation.

Låt oss bygga en snabb exempel på String sammanslagning med hjälp av Stringklass:

StringBuilder stringBuilder = new StringBuilder(100); stringBuilder.append("Baeldung"); stringBuilder.append(" is"); stringBuilder.append(" awesome"); assertEquals("Baeldung is awesome", stringBuilder.toString());

Internt upprätthåller StringBuilder en förändrad uppsättning tecken. I vårt kodexempel har vi förklarat att detta har en initial storlek på 100 genom StringBuilder- konstruktören. På grund av denna storleksdeklaration kan StringBuilder vara ett mycket effektivt sätt att sammanfoga strängar .

Det är också värt att notera att StringBuffer- klassen är den synkroniserade versionen av StringBuilder .

Även om synkronisering ofta är synonymt med trådsäkerhet, rekommenderas det inte att användas i flertrådade applikationer på grund av StringBuffers byggmönster . Medan enskilda samtal till en synkroniserad metod är trådsäkra är det inte flera samtal.

3. Tilläggsoperatör

Därefter är tilläggsoperatören (+). Detta är samma operatör som resulterar i tillägg av siffror och är överbelastad för att sammanfogas när den tillämpas på Strängar.

Låt oss ta en snabb titt på hur detta fungerar:

String myString = "The " + "quick " + "brown " + "fox..."; assertEquals("The quick brown fox...", myString);

Vid första anblicken kan detta verka mycket mer kortfattat än alternativet StringBuilder . Men när källkoden kompileras översätts + -symbolen till kedjor av StringBuilder.append () -anrop . På grund av detta anses blandning av StringBuilder och + metod för sammanfogning vara dålig praxis .

Dessutom bör strängsammankoppling med + -operatören i en slinga undvikas. Eftersom strängobjektet är oföränderligt kommer varje anrop till sammankoppling att skapa ett nytt strängobjekt som skapas.

4. Sträng Metoder

Den String klassen själv ger en mängd metoder för att sammanfoga strängar.

4.1. String.concat

Inte överraskande är String.concat- metoden vår första anlöpshamn när vi försöker sammanfoga String- objekt. Den här metoden returnerar ett String- objekt, så att kedja samman metoden är en användbar funktion.

String myString = "Both".concat(" fickle") .concat(" dwarves") .concat(" jinx") .concat(" my") .concat(" pig") .concat(" quiz"); assertEquals("Both fickle dwarves jinx my pig quiz", myString);

I det här exemplet startas vår kedja med en sträng bokstavlig, med concat- metoden kan vi sedan kedja samtalen för att lägga till ytterligare strängar .

4.2. Sträng.format

Nästa är upp String.format metoden, som tillåter oss att injicera en mängd Java objekt till en sträng mall.

Den String.format metod signaturen tar en enda sträng som betecknar vår mall . Den här mallen innehåller "%" -tecken för att representera var de olika objektenbör placeras i den.

När vår mall har förklarats tar den en varargs Object- array som injiceras i mallen.

Låt oss se hur detta fungerar med ett snabbt exempel:

String myString = String.format("%s %s %.2f %s %s, %s...", "I", "ate", 2.5056302, "blueberry", "pies", "oops"); assertEquals("I ate 2.51 blueberry pies, oops...", myString);

Som vi kan se ovan har metoden injicerat våra strängar i rätt format.

4.3. String.join (Java 8+)

Om vår applikation körs på Java 8 eller senare kan vi dra nytta av metoden String.join . Med detta kan vi gå med i en rad strängar med en gemensam avgränsare så att inga utrymmen missas.

String[] strings = {"I'm", "running", "out", "of", "pangrams!"}; String myString = String.join(" ", strings); assertEquals("I'm running out of pangrams!", myString); 

En stor fördel med denna metod är att du inte behöver oroa dig för avgränsaren mellan våra strängar.

5. StringJoiner (Java 8+)

StringJoiner drar ut alla funktioner i String.join till en enkel att använda klass. Den konstruktören tar en avgränsare, med en valfri prefix och suffix . Vi kan lägga till strängar med den väl namngivna tilläggsmetoden .

StringJoiner fruitJoiner = new StringJoiner(", "); fruitJoiner.add("Apples"); fruitJoiner.add("Oranges"); fruitJoiner.add("Bananas"); assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());

Genom att använda den här klassen, istället för String.join- metoden, kan vi lägga till strängar när programmet körs ; Det finns inget behov av att skapa arrayen först!

Gå vidare till vår artikel om StringJoiner för mer information och exempel.

6. Arrays.toString

I ämnet arrays innehåller Array- klassen också en praktisk toString- metod som snyggt formaterar en uppsättning objekt. De matriser. toString- metoden anropar också toString- metoden för alla slutna objekt - så vi måste se till att vi har en definierad.

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

Tyvärr arrays. toString- metoden kan inte anpassas och matar bara ut en sträng som är innesluten i hakparenteser.

7. Collectors.joining (Java 8+)

Slutligen, låt oss ta en titt på Collectors.joining- metoden som gör att vi kan kanalisera utgången från en ström till en enda sträng.

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

Användning av strömmar låser upp all funktionalitet som är kopplad till Java 8 Stream API, såsom filtrering, mappning, iterering och mer.

8. Packa upp

I den här artikeln har vi gjort ett djupt dyk i de många klasser och metoder som används för att sammanfoga strängarpå Java-språket.

Som alltid är källkoden tillgänglig på GitHub.