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 .