Comment inverser une chaîne en Java

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons voir comment inverser une chaîne en Java.

Nous allons commencer à faire ce traitement en utilisant des solutions Java simples. Ensuite, nous examinerons les options fournies par les bibliothèques tierces comme Apache Commons.

De plus, nous montrerons comment inverser l'ordre des mots dans une phrase .

2. Une boucle for traditionnelle

Nous savons que les chaînes sont immuables en Java. Un objet immuable est un objet dont l'état interne reste constant après avoir été entièrement créé.

Par conséquent, nous ne pouvons pas inverser une chaîne en la modifiant. Nous devons créer une autre chaîne pour cette raison.

Tout d'abord, voyons un exemple de base utilisant une boucle for . Nous allons parcourir l' entrée String du dernier au premier élément et concaténer chaque caractère dans une nouvelle chaîne :

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

Comme nous pouvons le voir, nous devons faire attention aux cas d'angle et les traiter séparément.

Afin de mieux comprendre l'exemple, nous pouvons construire un test unitaire:

@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 propose également des mécanismes tels que StringBuilder et StringBuffer qui créent une séquence de caractères mutable . Ces objets ont une méthode reverse () qui nous aide à obtenir le résultat souhaité.

Ici, nous devons créer un StringBuilder à partir de l' entrée String , puis appeler la méthode 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 est une bibliothèque Java populaire avec de nombreuses classes d'utilitaires, y compris la manipulation de chaînes.

Comme d'habitude, pour commencer à utiliser Apache Commons, nous devons d'abord ajouter la dépendance Maven:

 org.apache.commons commons-lang3 3.9 

La classe StringUtils est ce dont nous avons besoin ici car elle fournit la méthode reverse () similaire à StringBuilder .

L'un des avantages de l'utilisation de cette bibliothèque est que ses méthodes utilitaires effectuent des opérations de sécurité nulle . Donc, nous n'avons pas à traiter les cas extrêmes séparément.

Créons une méthode qui remplit notre objectif et utilise la classe StringUtils :

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

Maintenant, en regardant ces trois méthodes, nous pouvons certainement dire que la troisième est la manière la plus simple et la moins sujette aux erreurs d'inverser une chaîne .

5. Inversion de l'ordre des mots dans une phrase

Maintenant, supposons que nous ayons une phrase avec des mots séparés par des espaces et sans signes de ponctuation. Nous devons inverser l'ordre des mots dans cette phrase.

Nous pouvons résoudre ce problème en deux étapes: découper la phrase par le séparateur d'espace puis concaténer les mots dans l'ordre inverse.

Tout d'abord, nous montrerons une approche classique. Nous allons utiliser la méthode S tring.split () afin de répondre à la première partie de notre problème. Ensuite, nous allons parcourir le tableau résultant en arrière et concaténer les mots à l'aide d'un StringBuilder . Bien sûr, nous devons également ajouter un espace entre ces mots:

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

Deuxièmement, nous envisagerons d'utiliser la bibliothèque Apache Commons. Encore une fois, cela nous aide à obtenir un code plus lisible et moins sujet aux erreurs. Il suffit d'appeler la méthode StringUtils.reverseDelimited () avec la phrase d'entrée et le délimiteur comme arguments:

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

6. Conclusion

Dans ce didacticiel, nous avons d'abord examiné différentes façons d'inverser une chaîne en Java. Nous avons examiné quelques exemples utilisant le noyau Java, ainsi qu'une bibliothèque tierce populaire comme Apache Commons.

Ensuite, nous avons vu comment inverser l'ordre des mots dans une phrase en deux étapes. Ces étapes peuvent également être utiles pour réaliser d'autres permutations d'une phrase.

Comme d'habitude, tous les exemples de code présentés dans ce didacticiel sont disponibles à l'adresse over sur GitHub.