Cum se inversează un șir în Java

1. Prezentare generală

În acest tutorial rapid, vom vedea cum putem inversa un șir în Java.

Vom începe să facem această procesare folosind soluții Java simple. În continuare, vom arunca o privire asupra opțiunilor oferite de bibliotecile terțe, precum Apache Commons.

Mai mult, vom demonstra cum să inversăm ordinea cuvintelor într-o propoziție .

2. Un tradițional pentru buclă

Știm că șirurile sunt imuabile în Java. Un obiect imuabil este un obiect a cărui stare internă rămâne constantă după ce a fost creat în întregime.

Prin urmare, nu putem inversa un șir modificându-l. Din acest motiv, trebuie să creăm un alt șir .

În primul rând, să vedem un exemplu de bază folosind o buclă for . Vom itera peste intrarea String de la ultimul la primul element și vom concatena fiecare caracter într-un nou 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; }

După cum putem vedea, trebuie să fim atenți la carcasele din colț și să le tratăm separat.

Pentru a înțelege mai bine exemplul, putem construi un test unitar:

@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. Un StringBuilder

Java oferă, de asemenea, câteva mecanisme precum StringBuilder și StringBuffer care creează o secvență mutabilă de caractere . Aceste obiecte au o metodă inversă () care ne ajută să obținem rezultatul dorit.

Aici, trebuie să creăm un StringBuilder din intrarea String și apoi să apelăm metoda 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 este o populară bibliotecă Java cu o mulțime de clase de utilități, inclusiv manipularea șirurilor.

Ca de obicei, pentru a începe să folosim Apache Commons, trebuie mai întâi să adăugăm dependența Maven:

 org.apache.commons commons-lang3 3.9 

StringUtils Clasa este ceea ce avem nevoie aici , deoarece oferă inversă () metoda similară cu StringBuilder .

Un avantaj al utilizării acestei biblioteci este că metodele sale de utilitate efectuează operațiuni null- safe . Deci, nu trebuie să tratăm cazurile de margine separat.

Să creăm o metodă care ne îndeplinește scopul și utilizează clasa StringUtils :

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

Acum, uitându-ne la aceste trei metode, putem spune cu siguranță că a treia este cea mai simplă și cea mai puțin predispusă la erori pentru a inversa un șir .

5. Inversarea ordinii cuvintelor într-o propoziție

Acum, să presupunem că avem o propoziție cu cuvinte separate prin spații și fără semne de punctuație. Trebuie să inversăm ordinea cuvintelor din această propoziție.

Putem rezolva această problemă în doi pași: împărțirea propoziției de delimitatorul de spațiu și apoi concatenarea cuvintelor în ordine inversă.

În primul rând, vom arăta o abordare clasică. Vom folosi metoda S tring.split () pentru a îndeplini prima parte a problemei noastre. Apoi, vom itera înapoi prin matricea rezultată și vom concatena cuvintele folosind un StringBuilder . Desigur, trebuie să adăugăm și un spațiu între aceste cuvinte:

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(); }

În al doilea rând, vom lua în considerare utilizarea bibliotecii Apache Commons. Încă o dată, ne ajută să obținem un cod mai lizibil și mai puțin predispus la erori. Trebuie doar să apelăm metoda StringUtils.reverseDelimited () cu propoziția de intrare și delimitatorul ca argumente:

public String reverseTheOrderOfWordsUsingApacheCommons(String sentence) { return StringUtils.reverseDelimited(sentence, ' '); }

6. Concluzie

În acest tutorial, am analizat mai întâi diferite moduri de a inversa un șir în Java. Am parcurs câteva exemple folosind Java de bază, precum și folosind o populară bibliotecă terță parte, cum ar fi Apache Commons.

Apoi, am văzut cum să inversăm ordinea cuvintelor într-o propoziție în doi pași. Acești pași pot fi, de asemenea, de ajutor în realizarea altor permutări ale unei propoziții.

Ca de obicei, toate exemplele de cod afișate în acest tutorial sunt disponibile pe GitHub.