Strings aaneenschakelen in Java

1. Inleiding

Java biedt een aanzienlijk aantal methoden en klassen die zijn toegewezen aan aaneenschakeling Snaren.

In deze tutorial zullen we er ook in duiken geef een overzicht van enkele veelvoorkomende valkuilen en slechte praktijken.

2. StringBuilder

De eerste is de nederige StringBuilder. Deze klas biedt een scala aan Draad-het bouwen van hulpprogramma's dat maakt het gemakkelijk werk Draad manipulatie.

Laten we een snel voorbeeld maken van Draad aaneenschakeling met behulp van de StringBuilder klasse:

StringBuilder stringBuilder = nieuwe StringBuilder (100); stringBuilder.append ("Baeldung"); stringBuilder.append ("is"); stringBuilder.append ("geweldig"); assertEquals ("Baeldung is geweldig", stringBuilder.toString ());

Intern, StringBuilder onderhoudt een veranderlijke reeks karakters. In ons codevoorbeeld hebben we verklaard dat dit een aanvankelijke grootte van 100 door het StringBuilder constructeur. Vanwege deze maatverklaring is de StringBuilder kan zeer efficiënt zijnmanier om samen te voegen Snaren.

Het is ook vermeldenswaard dat de StringBuffer class is de gesynchroniseerde versie van StringBuilder.

Hoewel synchronisatie vaak synoniem is met thread-veiligheid, wordt het vanwege StringBuffer's bouwer patroon. Hoewel individuele oproepen naar een gesynchroniseerde methode thread-safe zijn, zijn meerdere oproepen dat niet.

3. Toevoegingsoperator

De volgende is de opteloperator (+). Dit is dezelfde operator die resulteert in de toevoeging van getallen en is overbelast om samen te voegen wanneer toegepast op Snaren.

Laten we snel kijken hoe dit werkt:

String myString = "De" + "snelle" + "bruin" + "vos ..."; assertEquals ("De snelle bruine vos ...", myString);

Op het eerste gezicht lijkt dit misschien veel beknopter dan de StringBuilder keuze. Wanneer de broncode echter compileert, het + symbool vertaalt naar ketens van StringBuilder.append () oproepen. Hierdoor, het mengen van de StringBuilder en + methode van aaneenschakeling is beschouwd als een slechte praktijk.

Bovendien, Draad aaneenschakeling met de operator + binnen een lus moet worden vermeden. Sinds de Draad object onveranderlijk is, zal elke aanroep voor aaneenschakeling resulteren in een nieuw Draad object wordt gemaakt.

4. Draad Methoden

De Draad class zelf biedt een hele reeks methoden voor aaneenschakeling Snaren.

4.1. String.concat

Het is niet verwonderlijk dat de String.concat methode is onze eerste aanloophaven wanneer we proberen samen te voegen Draad voorwerpen. Deze methode retourneert een Draad object, dus het aan elkaar koppelen van de methode is een handige functie.

String myString = "Beide" .concat ("wispelturig") .concat ("dwergen") .concat ("jinx") .concat ("mijn") .concat ("varken") .concat ("quiz"); assertEquals ("Beide wispelturige dwergen jinx mijn varken quiz", myString);

In dit voorbeeld wordt onze ketting gestart met een Draad letterlijk, de concat methode stelt ons vervolgens in staat om de oproepen te koppelen om verder toe te voegen Snaren.

4.2. String.format

De volgende is de String.format methode, waarmee we verschillende soorten Java kunnen injecteren Voorwerpen in een Draad sjabloon.

De String.format methode handtekening duurt een single Draad ter aanduiding van onze sjabloon. Dit sjabloon bevat ‘% 'tekens om aan te geven waar de verschillende Voorwerpenzou geplaatst moeten worden erin.

Zodra ons sjabloon is gedeclareerd, wordt het duurt een varargs Voorwerp array die wordt geïnjecteerd in de sjabloon.

Laten we eens kijken hoe dit werkt met een snel voorbeeld:

String myString = String.format ("% s% s% .2f% s% s,% s ...", "I", "at", 2.5056302, "blueberry", "pies", "oops"); assertEquals ("Ik at 2,51 bosbessentaarten, oeps ...", myString);

Zoals we hierboven kunnen zien, heeft de methode ons geïnjecteerd Snaren in het juiste formaat.

4.3. String.join (Java 8+)

Als onze applicatie draait op Java 8of daarboven, kunnen we profiteren van de String.join methode. Hiermee kunnen we sluit je aan bij een reeks Snaren met een gemeenschappelijk scheidingsteken, zodat er geen spaties worden gemist.

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

Een groot voordeel van deze methode is dat u zich geen zorgen hoeft te maken over het scheidingsteken tussen onze strings.

5. StringJoiner (Java 8+)

StringJoiner abstraheert alle String.join functionaliteit in een eenvoudig te gebruiken klasse. De constructor heeft een scheidingsteken, met een optioneel voorvoegsel en achtervoegsel. We kunnen toevoegen Snaren met behulp van de welbenoemde toevoegen methode.

StringJoiner fruitJoiner = nieuwe StringJoiner (","); fruitJoiner.add ("Appels"); fruitJoiner.add ("Sinaasappels"); fruitJoiner.add ("Bananen"); assertEquals ("Appels, sinaasappels, bananen", fruitJoiner.toString ());

Door deze klasse te gebruiken in plaats van de String.join methode, we kunnen toevoegen Snaren terwijl het programma wordt uitgevoerd; Het is niet nodig om eerst de array te maken!

Ga naar ons artikel over StringJoiner voor meer informatie en voorbeelden.

6. Arrays.toString

Over het onderwerp arrays, de Array klasse bevat ook een handig toString methode die een reeks objecten mooi opmaakt. De Arrays.toString methode roept ook de toString methode van elk ingesloten object - dus we moeten ervoor zorgen dat we er een hebben gedefinieerd.

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

Helaas, de Arrays.toString methode is niet aanpasbaar en alleen uitgangen een Draad ingekapseld tussen vierkante haken.

7. Verzamelaars. Toetreden (Java 8+)

Laten we tot slot eens kijken naar het Verzamelaars. Toetreden methode die stelt ons in staat om de output van een Stroom in een enkele Draad.

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

Door streams te gebruiken, ontgrendelt u alle functionaliteit die aan de Java 8 is gekoppeld Stroom API, zoals filteren, in kaart brengen, itereren en meer.

8. Afronden

In dit artikel hebben we een duik diep in de veelheid aan klassen en methoden die worden gebruikt om samen te voegen Snarenin de Java-taal.

Zoals altijd is de broncode beschikbaar op GitHub.


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