Hur man gör om en sträng i Java

1. Översikt

I den här snabba handledningen ska vi se hur vi kan vända en sträng i Java.

Vi börjar göra denna bearbetning med vanliga Java-lösningar. Därefter tittar vi på de alternativ som tredjepartsbiblioteken som Apache Commons tillhandahåller.

Vidare kommer vi att demonstrera hur man kan vända ordningsordningen i en mening .

2. En traditionell för loop

Vi vet att strängar är oföränderliga i Java. Ett oföränderligt objekt är ett objekt vars interna tillstånd förblir konstant efter det att det har skapats helt.

Därför kan vi inte vända en sträng genom att ändra den. Vi måste skapa en annan sträng av denna anledning.

Låt oss först se ett grundläggande exempel med en for- loop. Vi ska iterera över strängingången från det sista till det första elementet och sammanfoga varje tecken till en ny sträng :

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

Som vi kan se måste vi vara försiktiga i hörnfallet och behandla dem separat.

För att bättre förstå exemplet kan vi bygga ett enhetstest:

@Test public void whenReverseIsCalled_ThenCorrectStringIsReturned() { String reversed = ReverseStringExamples.reverse("cat"); String reversedNull = ReverseStringExamples.reverse(null); String reversedEmpty = ReverseStringExamples.reverse(StringUtils.EMPTY); assertEquals("tac", reversed); assertEquals(null, reversedNull); assertEquals(StringUtils.EMPTY, reversedEmpty); }

3. En StringBuilder

Java erbjuder också några mekanismer som StringBuilder och StringBuffer som skapar en förändrad sekvens av tecken . Dessa objekt har en omvänd () metod som hjälper oss att uppnå det önskade resultatet.

Här måste vi skapa en StringBuilder från strängingången och sedan ringa omvänd () -metoden:

public String reverseUsingStringBuilder(String input) { if (input == null) { return null; } StringBuilder output = new StringBuilder(input).reverse(); return output.toString(); }

4. Apache Commons

Apache Commons är ett populärt Java-bibliotek med många verktygsklasser inklusive strängmanipulation.

Som vanligt måste vi först lägga till Maven-beroendet för att komma igång med Apache Commons:

 org.apache.commons commons-lang3 3.9 

Den StringUtils klassen är vad vi behöver här eftersom det ger bakåt () metod som liknar String .

En fördel med att använda detta bibliotek är att dess verktygsmetoder utför null- säkra operationer . Så vi behöver inte behandla edge-fallen separat.

Låt oss skapa en metod som uppfyller vårt syfte och använder klassen StringUtils :

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

Nu när vi tittar på dessa tre metoder kan vi säkert säga att den tredje är det enklaste och det minst felbenägna sättet att vända en sträng .

5. Ångra ordordningen i en mening

Låt oss nu anta att vi har en mening med ord åtskilda av mellanslag och inga skiljetecken. Vi måste vända ordningsordningen i den här meningen.

Vi kan lösa detta problem i två steg: dela upp meningen med mellanslag och sedan sammanfoga orden i omvänd ordning.

Först visar vi ett klassiskt tillvägagångssätt. Vi ska använda metoden S tring.split () för att uppfylla den första delen av vårt problem. Därefter itererar vi bakåt genom den resulterande matrisen och sammanfogar orden med hjälp av en StringBuilder . Naturligtvis måste vi också lägga till ett mellanslag mellan dessa ord:

public String reverseTheOrderOfWords(String sentence) { if (sentence == null) { return null; } StringBuilder output = new StringBuilder(); String[] words = sentence.split(" "); for (int i = words.length - 1; i >= 0; i--) { output.append(words[i]); output.append(" "); } return output.toString().trim(); }

För det andra överväger vi att använda Apache Commons-biblioteket. Återigen hjälper det oss att uppnå en mer läsbar och mindre felbenägen kod. Vi behöver bara ringa metoden StringUtils.reverseDelimited () med inmatningsmenyn och avgränsaren som argument:

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

6. Sammanfattning

I denna handledning har vi först tittat på olika sätt att vända en sträng i Java. Vi gick igenom några exempel med hjälp av Java-kärnan, liksom med ett populärt tredjepartsbibliotek som Apache Commons.

Därefter har vi sett hur man vänder ordordningen i en mening i två steg. Dessa steg kan också vara till hjälp för att uppnå andra permutationer av en mening.

Som vanligt är alla kodprover som visas i denna handledning tillgängliga på GitHub.