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

1. Обзор

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

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

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

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

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

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

Во-первых, давайте посмотрим на базовый пример с использованием цикла for . Мы собираемся перебрать ввод 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; }

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

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

@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

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

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

 org.apache.commons commons-lang3 3.9 

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

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

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

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

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

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

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

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

Сначала мы покажем классический подход. Мы собираемся использовать метод S tring.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. Заключение

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

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

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