Hvordan reversere en streng i Java

1. Oversikt

I denne raske opplæringen skal vi se hvordan vi kan reversere a String i Java.

Vi begynner å gjøre denne behandlingen ved hjelp av vanlige Java-løsninger. Deretter tar vi en titt på alternativene som tredjepartsbibliotekene som Apache Commons tilbyr.

Videre vil vi demonstrere hvordan snu ordrenes ord i en setning.

2. En tradisjonell til Løkke

Vi vet at strenger er uforanderlige i Java. Et uforanderlig objekt er et objekt hvis intern tilstand forblir konstant etter at den er helt opprettet.

Derfor kan vi ikke reversere a String ved å endre den. Vi må lage en til String av denne grunn.

La oss først se et grunnleggende eksempel ved hjelp av a til Løkke. Vi skal iterere over String input fra det siste til det første elementet og sammenkoble hvert tegn til et nytt String:

public String reverse (String input) {if (input == null) {return input; } Strengutgang = ""; for (int i = input.length () - 1; i> = 0; i--) {output = output + input.charAt (i); } returnere utdata; }

Som vi kan se, må vi være forsiktige i hjørnesakene og behandle dem hver for seg.

For å bedre forstå eksemplet kan vi bygge en enhetstest:

@Test offentlig ugyldig nårReverseIsCalled_ThenCorrectStringIsReturned () {String reversed = ReverseStringExamples.reverse ("cat"); String reversedNull = ReverseStringExamples.reverse (null); Streng reversedEmpty = ReverseStringExamples.reverse (StringUtils.EMPTY); assertEquals ("tac", reversert); assertEquals (null, reversedNull); assertEquals (StringUtils.EMPTY, reversedEmpty); }

3. A StringBuilder

Java tilbyr også noen mekanismer som StringBuilder og StringBuffer som skaper en foranderlig sekvens av tegn. Disse objektene har en omvendt() metode som hjelper oss å oppnå ønsket resultat.

Her må vi lage en StringBuilder fra String inngang og ring deretter omvendt() metode:

public String reverseUsingStringBuilder (String input) {if (input == null) {return null; } StringBuilder-utgang = ny StringBuilder (input). Revers (); returnere output.toString (); }

4. Apache Commons

Apache Commons er et populært Java-bibliotek med mange verktøyklasser, inkludert strengmanipulering.

Som vanlig, for å komme i gang med Apache Commons, må vi først legge til Maven-avhengigheten:

 org.apache.commons commons-lang3 3.9 

De StringUtils klasse er det vi trenger her fordi det gir omvendt() metode lik StringBuilder.

En fordel med å bruke dette biblioteket er at dets bruksmetoder utfører null-sikker drift. Så vi trenger ikke å behandle kantsakene hver for seg.

La oss lage en metode som oppfyller vårt formål og bruker StringUtils klasse:

public String reverseUsingApacheCommons (String input) {return StringUtils.reverse (input); }

Nå, når vi ser på disse tre metodene, kan vi absolutt si at den tredje er enkleste og minst feilutsatte måte å reversere en String.

5. Å reversere ordrenes ord

La oss anta at vi har en setning med ord atskilt med mellomrom og ingen skilletegn. Vi må snu rekkefølgen på ordene i denne setningen.

Vi kan løse dette problemet i to trinn: dele setningen med mellomrom og deretter sammenkoble ordene i omvendt rekkefølge.

Først viser vi en klassisk tilnærming. Vi skal bruke String.split () metode for å oppfylle den første delen av problemet vårt. Deretter vil vi iterere bakover gjennom den resulterende matrisen og sammenkoble ordene ved hjelp av a StringBuilder. Selvfølgelig må vi også legge til et mellomrom mellom disse ordene:

offentlig streng reverseTheOrderOfWords (streng setning) {if (setning == null) {return null; } StringBuilder-utgang = ny StringBuilder (); Streng [] ord = setning.split (""); for (int i = ord. lengde - 1; i> = 0; i--) {utgang.tillegg (ord [i]); output.append (""); } returner output.toString (). trim (); }

For det andre vil vi vurdere å bruke Apache Commons-biblioteket. Nok en gang hjelper det oss å oppnå en mer lesbar og mindre feilutsatt kode. Vi trenger bare å ringe StringUtils.reverseDelimited () metoden med inngangssetningen og avgrenseren som argumenter:

public String reverseTheOrderOfWordsUsingApacheCommons (String setning) {return StringUtils.reverseDelimited (setning, ''); }

6. Konklusjon

I denne opplæringen har vi først sett på forskjellige måter å reversere a på String i Java. Vi gikk gjennom noen eksempler ved hjelp av kjernen Java, samt brukte et populært tredjepartsbibliotek som Apache Commons.

Deretter har vi sett hvordan vi kan reversere rekkefølgen på ord i en setning i to trinn. Disse trinnene kan også være nyttige for å oppnå andre permutasjoner av en setning.

Som vanlig er alle kodeeksemplene som vises i denne opplæringen tilgjengelig på GitHub.