Vanlige strengoperasjoner i Java

1. Introduksjon

Strengbaserte verdier og operasjoner er ganske vanlige i hverdagsutviklingen, og enhver Java-utvikler må kunne håndtere dem.

I denne opplæringen vil vi gi et raskt jukseark vanlig String operasjoner.

I tillegg vil vi belyse forskjellene mellom er lik og “==” og mellom StringUtils # isBlank og #er tom.

2. Transformere en røye til en streng

EN røye representerer ett tegn i Java. Men i de fleste tilfeller trenger vi en String.

Så la oss begynne med å transformere røyes inn i Strings:

String toStringWithConcatenation (final char c) {return String.valueOf (c); }

3. Legge til strenger

En annen ofte nødvendig operasjon er å legge til strenger med andre verdier, som en røye:

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

Vi kan legge til andre basistyper med en StringBuilder også:

String appendWithStringBuilder (final String prefix, final char c) {return new StringBuilder (prefix) .append (c) .toString (); }

4. Få et tegn etter indeks

Hvis vi trenger å trekke ut ett tegn fra en streng, gir API alt vi ønsker:

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

Siden a String bruker en røye [] som en støttedatastruktur, indeksen starter på null.

5. Håndtering av ASCII-verdier

Vi kan enkelt bytte mellom en røye og dens numeriske representasjon (ASCII) ved å støpe:

int asciiValue (final char character) {return (int) character; } char fraAsciiValue (final int value) {Assert.isTrue (value> = 0 && value <65536, "value is not a valid character"); retur (char) verdi; }

Selvfølgelig, siden en int er 4 usignerte byte og en røye er to usignerte byte, må vi sjekke for å sikre at vi jobber med juridiske karakterverdier.

6. Fjerne alt hvitt mellomrom

Noen ganger må vi kvitte oss med noen tegn, oftest mellomrom. EN god måte er å bruke erstatte alle metode med et vanlig uttrykk:

Streng removeWhiteSpace (endelig strengtekst) {return text.replaceAll ("\ s +", ""); }

7. Å bli med i samlinger til en streng

En annen vanlig brukssak er når vi har en slags Samling og vil lage en streng ut av den:

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

Legg merke til at Samlere. Blir med tillater å spesifisere prefikset eller suffikset.

8. Splitting a String

Eller på den annen side kan vi dele en streng ved å avgrense ved hjelp av dele metode:

String [] splitByRegExPipe (final String text) return text.split ("\

Igjen bruker vi et vanlig uttrykk her, denne gangen for å splitte av et rør. Siden vi ønsker å bruke en spesiell karakter, må vi unnslippe den.

En annen mulighet er å bruke Mønster klasse:

String [] splitByPatternPipe (final String text) ")); 

9. Behandle alle tegn som en strøm

I tilfelle detaljert behandling kan vi transformere en streng til en IntStream:

IntStream getStream (siste strengtekst) {return text.chars (); }

10. Referanse Likhet og Verdilikhet

Selv om strenger ser ut som en primitiv type, er de ikke.

Derfor må vi skille mellom referanselikhet og verdilikhet. Referanselikhet innebærer alltid verdilikhet, men generelt ikke omvendt. Den første sjekker vi med ‘==’ operasjonen og sistnevnte, med er lik metode:

@Test offentlig ugyldig nårUsingEquals_thenWeCheckForTheSameValue () {assertTrue ("Verdiene er like", ny streng ("Test"). Er lik ("Test")); } @Test offentlig ugyldig nårUsingEqualsSign_thenWeCheckForReferenceEquality () {assertFalse ("Referansene er ikke like", ny streng ("Test") == "Test"); }

Legg merke til at bokstaver er internert i strengbassenget. Derfor kan kompilatoren til tider optimalisere dem til samme referanse:

@Test offentlig ugyldig nårTheCompileCanBuildUpAString_thenWeGetTheSameReference () {assertTrue ("Bokstavene er sammenkoblet av kompilatoren", "Test" == "Te" + "st"); }

11. Tom streng vs. tom streng

Det er en subtil forskjell mellom er tom og er tom.

En streng er tom hvis den er null eller har lengde null. Mens en streng er tom hvis den er null eller bare inneholder mellomromstegn:

@Test offentlig ugyldig nårUsingIsEmpty_thenWeCheckForNullorLengthZero () {assertTrue ("null er tom", isEmpty (null)); assertTrue ("ingenting er tomt", isEmpty ("")); assertFalse ("mellomrommet er ikke tomt", er tomt ("")); assertFalse ("mellomrommet er ikke tomt", er tomt ("\ n")); assertFalse ("mellomrommet er ikke tomt", er tomt ("\ t")); assertFalse ("teksten er ikke tom", isEmpty ("Alt!")); } @Test offentlig ugyldig nårUsingIsBlank_thenWeCheckForNullorOnlyContainingWhitespace () {assertTrue ("null er blank", isBlank (null)); assertTrue ("ingenting er tomt", isBlank ("")); assertTrue ("mellomrommet er tomt", isBlank ("\ t \ t \ t \ n \ r")); assertFalse ("testen er ikke blank", isBlank ("Alt!")); }

12. Konklusjon

Strenger er en kjernetype i alle slags applikasjoner. I denne opplæringen lærte vi noen viktige operasjoner i vanlige scenarier.

Videre ga vi veibeskrivelse til mer detaljerte referanser.

Endelig er hele koden med alle eksempler tilgjengelig i GitHub-depotet vårt.


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