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.