Перейти к основному содержимому

Как перевернуть строку в Java

· 4 мин. чтения

1. Обзор

В этом кратком руководстве мы увидим, как мы можем обратить строку в Java.

Мы начнем выполнять эту обработку, используя простые решения Java. Далее мы рассмотрим параметры, которые предоставляют сторонние библиотеки, такие как Apache Commons.

Кроме того, мы покажем, как изменить порядок слов в предложении на обратный .

2. Традиционный цикл for

Мы знаем, что строки в Java неизменяемы . Неизменяемый объект — это объект, внутреннее состояние которого остается постоянным после того, как он был полностью создан.

Следовательно, мы не можем отменить строку , изменив ее. По этой причине нам нужно создать еще одну строку .

Во-первых, давайте рассмотрим базовый пример использования цикла for . Мы собираемся перебирать входную строку от последнего до первого элемента и объединять каждый символ в новую строку :

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

Как мы видим, нам нужно быть осторожными с крайними случаями и рассматривать их отдельно.

Чтобы лучше понять пример, мы можем построить модульный тест:

@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 также предлагает некоторые механизмы, такие как StringBuilder и StringBuffer , которые создают изменяемую последовательность символов . Эти объекты имеют метод reverse() , который помогает нам достичь желаемого результата.

Здесь нам нужно создать StringBuilder из ввода String , а затем вызвать метод reverse() :

public String reverseUsingStringBuilder(String input) {
if (input == null) {
return null;
}

StringBuilder output = new StringBuilder(input).reverse();
return output.toString();
}

4. Апач Коммонс

Apache Commons — это популярная библиотека Java с множеством служебных классов, включая работу со строками.

Как обычно, чтобы начать использовать Apache Commons, нам сначала нужно добавить зависимость Maven :

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>

Здесь нам нужен класс StringUtils , потому что он предоставляет метод reverse() , аналогичный StringBuilder .

Одним из преимуществ использования этой библиотеки является то, что ее служебные методы выполняют операции , безопасные для нулей . Таким образом, нам не нужно рассматривать пограничные случаи отдельно.

Давайте создадим метод, который соответствует нашей цели и использует класс StringUtils :

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

Теперь, глядя на эти три метода, мы можем с уверенностью сказать, что третий — самый простой и наименее подверженный ошибкам способ реверсирования String .

5. Изменение порядка слов в предложении

Теперь предположим, что у нас есть предложение со словами, разделенными пробелами, и без знаков препинания. Нам нужно поменять порядок слов в этом предложении.

Мы можем решить эту проблему в два этапа: разбить предложение по разделителю-пробелу, а затем соединить слова в обратном порядке.

Сначала мы покажем классический подход. Мы собираемся использовать метод S string.split() для решения первой части нашей задачи. Затем мы пройдемся по результирующему массиву в обратном направлении и соединим слова с помощью StringBuilder . Конечно, нам также нужно добавить пробел между этими словами:

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

Во-вторых, мы рассмотрим использование библиотеки Apache Commons. Опять же, это помогает нам получить более читаемый и менее подверженный ошибкам код. Нам нужно только вызвать метод StringUtils.reverseDelimited() с входным предложением и разделителем в качестве аргументов:

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

6. Заключение

В этом руководстве мы впервые рассмотрели различные способы обращения строки в Java. Мы рассмотрели несколько примеров с использованием ядра Java, а также с использованием популярной сторонней библиотеки, такой как Apache Commons.

Далее мы увидели, как изменить порядок слов в предложении на противоположный за два шага. Эти шаги также могут быть полезны для достижения других перестановок предложения.

Как обычно, все примеры кода, показанные в этом руководстве, доступны на GitHub .