Як змінити рядок на Java

1. Огляд

У цьому короткому посібнику ми побачимо, як ми можемо змінити рядок у Java.

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

Крім того, ми продемонструємо, як змінити порядок слів у реченні .

2. Традиційний для петлі

Ми знаємо, що рядки є незмінними в 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, які створюють змінну послідовність символів . Ці об’єкти мають метод зворотного (), який допомагає нам досягти бажаного результату.

Тут нам потрібно створити 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); }

Тепер, розглядаючи ці три методи, ми можемо напевно сказати, що третій - це найпростіший і найменш схильний до помилок спосіб змінити рядок назад .

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. Висновок

У цьому підручнику ми спочатку розглянули різні способи реверсування рядка в Java. Ми переглянули кілька прикладів використання базової Java, а також популярної сторонньої бібліотеки, такої як Apache Commons.

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

Як завжди, усі зразки коду, показані в цьому посібнику, доступні на GitHub.