Veelvoorkomende stringbewerkingen in Java

1. Inleiding

String-gebaseerde waarden en bewerkingen zijn vrij gebruikelijk in de dagelijkse ontwikkeling, en elke Java-ontwikkelaar moet ermee kunnen omgaan.

In deze tutorial geven we een kort spiekbriefje met veelvoorkomende Draad operaties.

Bovendien zullen we wat licht werpen op de verschillen tussen is gelijk aan en "==" en tussen StringUtils # isBlank en #is leeg.

2. Transformeren van een Char in een String

EEN char vertegenwoordigt één teken in Java. Maar in de meeste gevallen hebben we een Draad.

Dus laten we beginnen met transformeren chars in Draads:

String toStringWithConcatenation (laatste teken c) {return String.valueOf (c); }

3. Strings toevoegen

Een andere veelgebruikte bewerking is het toevoegen van andere waarden aan tekenreeksen, zoals een char:

String appendWithConcatenation (final String prefix, final char c) {return prefix + c; }

We kunnen andere basistypen toevoegen met een StringBuilder ook:

String appendWithStringBuilder (laatste String-prefix, laatste char c) {retourneer nieuwe StringBuilder (prefix) .append (c) .toString (); }

4. Een karakter per index krijgen

Als we één teken uit een string moeten extraheren, biedt de API alles wat we willen:

char getCharacterByIndex (final String text, final int index) {return text.charAt (index); }

Sinds een Draad gebruikt een char [] als ondersteunende datastructuur, de index begint bij nul.

5. Omgaan met ASCII-waarden

We kunnen gemakkelijk schakelen tussen een char en zijn numerieke weergave (ASCII) door te gieten:

int asciiValue (laatste char-teken) {return (int) -teken; } char fromAsciiValue (laatste int waarde) {Assert.isTrue (waarde> = 0 && waarde <65536, "waarde is geen geldig teken"); return (char) waarde; }

Natuurlijk, aangezien een int is 4 ongetekende bytes en een char 2 bytes zonder teken is, moeten we controleren of we met legale tekenwaarden werken.

6. Alle witruimte verwijderen

Soms moeten we enkele tekens verwijderen, meestal witruimte. EEN een goede manier is om de vervang alles methode met een reguliere expressie:

String removeWhiteSpace (laatste String-tekst) {return text.replaceAll ("\ s +", ""); }

7. Verzamelingen aan een string koppelen

Een ander veelvoorkomend geval is wanneer we een soort van Verzameling en wil er een string van maken:

 String fromCollection (uiteindelijke collectiecollectie) {return collection.stream (). Map (Objects :: toString) .collect (Collectors.joining (",")); }

Merk op dat de Verzamelaars. Toetreden staat het specificeren van het voorvoegsel of het achtervoegsel toe.

8. Splitsen van een string

Of aan de andere kant kunnen we een string splitsen door middel van een scheidingsteken met behulp van de splitsen methode:

String [] splitByRegExPipe (laatste String-tekst) return text.split ("\

Nogmaals, we gebruiken hier een reguliere expressie, deze keer om te splitsen door een pijp. Omdat we een speciaal teken willen gebruiken, moeten we eraan ontsnappen.

Een andere mogelijkheid is om de Patroon klasse:

String [] splitByPatternPipe (laatste String-tekst) ")); 

9. Verwerken van alle karakters als een stroom

In het geval van gedetailleerde verwerking kunnen we een string omzetten in een IntStream:

IntStream getStream (laatste String-tekst) {return text.chars (); }

10. Referentie gelijkheid en waardegelijkheid

Hoewel strings eruit zien als een primitief type, dat zijn ze niet.

Daarom moeten we onderscheid maken tussen referentiegelijkheid en waardegelijkheid. Referentiegelijkheid impliceert altijd waardegelijkheid, maar in het algemeen niet andersom. De eerste controleren we met de ‘== 'bewerking en de laatste met de is gelijk aan methode:

@Test public void whenUsingEquals_thenWeCheckForTheSameValue () {assertTrue ("Waarden zijn gelijk", nieuwe String ("Test"). Equals ("Test")); } @Test public void whenUsingEqualsSign_thenWeCheckForReferenceEquality () {assertFalse ("Verwijzingen zijn niet gelijk", new String ("Test") == "Test"); }

Merk op dat letterlijke tekens worden geïnterneerd in de stringpool. Daarom kan de compiler ze soms optimaliseren voor dezelfde referentie:

@Test public void whenTheCompileCanBuildUpAString_thenWeGetTheSameReference () {assertTrue ("Letterlijke letters worden aaneengeschakeld door de compiler", "Test" == "Te" + "st"); }

11. Lege string versus lege string

Er is een subtiel verschil tussen is leeg en is leeg.

Een string is leeg als deze is nul of heeft een lengte nul. Terwijl een string leeg is als deze null is of alleen spaties bevat:

@Test openbare leegte whenUsingIsEmpty_thenWeCheckForNullorLengthZero () {assertTrue ("null is leeg", isEmpty (null)); assertTrue ("niets is leeg", isEmpty ("")); assertFalse ("witruimte is niet leeg", isEmpty ("")); assertFalse ("witruimte is niet leeg", isEmpty ("\ n")); assertFalse ("witruimte is niet leeg", isEmpty ("\ t")); assertFalse ("tekst is niet leeg", isEmpty ("Alles!")); } @Test openbare leegte whenUsingIsBlank_thenWeCheckForNullorOnlyContainingWhitespace () {assertTrue ("null is leeg", isBlank (null)); assertTrue ("niets is leeg", isBlank ("")); assertTrue ("witruimte is leeg", isBlank ("\ t \ t \ t \ n \ r")); assertFalse ("test is niet leeg", isBlank ("Anything!")); }

12. Conclusie

Strings zijn een kerntype in allerlei toepassingen. In deze zelfstudie hebben we enkele belangrijke bewerkingen in veelvoorkomende scenario's geleerd.

Verder gaven we aanwijzingen naar meer gedetailleerde referenties.

Ten slotte is de volledige code met alle voorbeelden beschikbaar in onze GitHub-repository.


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