Jak odwrócić ciąg znaków w Javie

1. Przegląd

W tym krótkim samouczku zobaczymy, jak możemy odwrócić ciąg znaków w Javie.

Zaczniemy to przetwarzanie przy użyciu zwykłych rozwiązań Java. Następnie przyjrzymy się opcjom udostępnianym przez biblioteki innych firm, takie jak Apache Commons.

Ponadto pokażemy, jak odwrócić kolejność słów w zdaniu .

2. Tradycyjny dla pętli

Wiemy, że w Javie ciągi znaków są niezmienne. Niezmienny przedmiot to obiekt, którego stan wewnętrzny pozostaje niezmienny po całkowitym utworzeniu.

Dlatego nie możemy odwrócić String , modyfikując go. Z tego powodu musimy utworzyć kolejny ciąg .

Najpierw zobaczmy podstawowy przykład użycia pętli for . Zamierzamy iterować dane wejściowe String od ostatniego do pierwszego elementu i łączyć każdy znak w nowy String :

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; }

Jak widać, musimy uważać na narożne przypadki i traktować je osobno.

Aby lepiej zrozumieć przykład, możemy zbudować test jednostkowy:

@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. StringBuilder

Java oferuje również mechanizmy, takie jak StringBuilder i StringBuffer, które tworzą zmienną sekwencję znaków . Te obiekty mają metodę reverse () , która pomaga nam osiągnąć pożądany rezultat.

Tutaj musimy utworzyć StringBuilder z wejścia String, a następnie wywołać metodę reverse () :

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

4. Apache Commons

Apache Commons to popularna biblioteka Java z wieloma klasami narzędziowymi, w tym manipulacjami na ciągach.

Jak zwykle, aby zacząć korzystać z Apache Commons, musimy najpierw dodać zależność Maven:

 org.apache.commons commons-lang3 3.9 

StringUtils klasa jest to, czego potrzebujemy, bo to zapewnia reverse () metodę podobną do StringBuilder .

Jedną z zalet korzystania z tej biblioteki jest to, że jej metody narzędziowe wykonują operacje null- bezpieczne . Nie musimy więc osobno traktować skrajnych przypadków.

Stwórzmy metodę, która spełnia nasz cel i wykorzystuje klasę StringUtils :

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

Teraz, patrząc na te trzy metody, z pewnością możemy powiedzieć, że trzecia jest najprostszym i najmniej podatnym na błędy sposobem odwrócenia ciągu znaków .

5. Zmiana kolejności słów w zdaniu

Teraz załóżmy, że mamy zdanie ze słowami oddzielonymi spacjami i bez znaków interpunkcyjnych. Musimy odwrócić kolejność słów w tym zdaniu.

Możemy rozwiązać ten problem w dwóch krokach: rozdzielając zdanie ogranicznikiem spacji, a następnie łącząc słowa w odwrotnej kolejności.

Najpierw pokażemy klasyczne podejście. Zamierzamy użyć metody S tring.split () , aby spełnić pierwszą część naszego problemu. Następnie przejdziemy wstecz przez wynikową tablicę i połączymy słowa przy użyciu StringBuilder . Oczywiście musimy również dodać spację między tymi słowami:

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(); }

Po drugie, rozważymy użycie biblioteki Apache Commons. Po raz kolejny pomaga nam to uzyskać bardziej czytelny i mniej podatny na błędy kod. Wystarczy wywołać metodę StringUtils.reverseDelimited () ze zdaniem wejściowym i ogranicznikiem jako argumentami:

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

6. Wniosek

W tym samouczku najpierw przyjrzeliśmy się różnym sposobom odwracania ciągu znaków w Javie. Przeszliśmy przez kilka przykładów przy użyciu podstawowej Java, a także przy użyciu popularnej biblioteki innej firmy, takiej jak Apache Commons.

Następnie widzieliśmy, jak odwrócić kolejność słów w zdaniu w dwóch krokach. Te kroki mogą być również pomocne w uzyskaniu innych permutacji zdania.

Jak zwykle wszystkie przykłady kodu pokazane w tym samouczku są dostępne w serwisie GitHub.