Как да обърнете низ в Java

1. Общ преглед

В този бърз урок ще видим как можем да обърнем низ в Java.

Ще започнем да правим тази обработка, използвайки обикновени Java решения. След това ще разгледаме опциите, които предоставят библиотеките на трети страни като Apache Commons.

Освен това ще демонстрираме как да обърнем реда на думите в изречение .

2. Традиционен за Loop

Знаем, че низовете са неизменни в Java. Неизменим обект е обект, чието вътрешно състояние остава постоянно, след като е изцяло създадено.

Следователно не можем да обърнем низ, като го модифицираме. По тази причина трябва да създадем друг низ .

Първо, нека видим основен пример, използващ цикъл for . Ще прегледаме въведеното от String от последния до първия елемент и ще обединим всеки символ в нов 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, които създават променлива последователност от символи . Тези обекти имат метод за обратен () , който ни помага да постигнем желания резултат.

Тук трябва да създадем 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.