La classe string n’a aucune méthode permettant de trier directement une chaîne, mais nous pouvons trier une chaîne en appliquant d’autres méthodes les unes après les autres. La chaîne est une séquence de caractères. En Java, les objets String sont immuables, ce qui signifie une constante et ne peuvent pas être modifiés une fois créés.
Créer une chaîne
Il existe deux manières de créer une chaîne en Java :
- Chaîne littérale
String s = techcodeview.com;>
- En utilisant nouveau mot-clé
String s = new String (techcodeview.com);>
Note: Comme nous savons que String est immuable en Java, donc dans la troisième étape, nous devons créer une nouvelle chaîne.
Méthodes :
Il existe deux méthodes avec lesquelles nous pouvons trier n’importe quelle chaîne en Java par ordre alphabétique
booléen en c
- Sans utiliser la méthode sort()
- En utilisant le méthode trier()
Illustration:
Input string : 'geeksforgeeks' Output string : 'eeeefggkkorss'>
Discutons maintenant des méthodes et implémentons-les.
Méthode 1 : Sans utiliser la méthode sort()
Ici, nous allons présenter une approche pour trier une chaîne sans utiliser de logique prédéfinie. Cela devient donc également une approche importante du point de vue perspicace de l’entretien.
composants du robot
Procédure:
- Convertissez une chaîne en tableau à l'aide de la méthode toCharArray() de la classe String
- Utilisez maintenant des boucles imbriquées pour vérifier l'échange d'éléments d'un tableau.
- Imprimez ces éléments du tableau de caractères.
Exemple
Java // Java program for Sorting a String without using any inbuilt sorting functions import java.io.*; class StringSort { //The Merge Function, handling the core compare & copy logic void merge(char arr[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; char L[] = new char[n1]; char R[] = new char[n2]; //Logic for backing up to temp arrays for (int i = 0; i < n1; ++i) L[i] = arr[l + i]; for (int j = 0; j < n2; ++j) R[j] = arr[m + 1 + j]; int i = 0, j = 0; int k = l; //Logic to compare and copy. The core Merge Logic of the Merge sort. while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } //Logic to copy remaining elements of L[] while (i < n1) { arr[k] = L[i]; i++; k++; } //Logic to copy remaining elements of R[] while (j < n2) { arr[k] = R[j]; j++; k++; } } //The main Merge Sort function from where the sorting begins void mergeSort(char arr[], int l, int r) { if (l < r) { // Find the middle point int m = l + (r - l) / 2; // Sort first and second halves mergeSort(arr, l, m); mergeSort(arr, m + 1, r); // Merge the sorted halves merge(arr, l, m, r); } } // A utility function to print char array of size n static void printArray(char arr[]) { int n = arr.length; for (int i = 0; i < n; ++i) System.out.print(arr[i] + ' '); System.out.println(); } // Driver code public static void main(String args[]) { String inputString = 'geeksforgeeks'; char arr[] = inputString.toCharArray(); System.out.println('Given array is'); printArray(arr); StringSort ob = new StringSort(); ob.mergeSort(arr, 0, arr.length - 1); System.out.println('
Sorted array is'); printArray(arr); } } /* This code is contributed by Nikhil B */>
Sortir:
eeeefggkkorss>
Complexité temporelle : O(n * journal n). (où « n » est la taille de la chaîne d'entrée.)
Méthode 2 : par en utilisant le méthode trier()
2A En utilisant le méthode sort()- tri naturel
Procédure:
- La logique principale est de Méthode toCharArray() de la classe String sur la chaîne d'entrée pour créer un tableau de caractères pour la chaîne d'entrée.
- Maintenant, utilisez Arrays.sort(char c[]) méthode pour trier le tableau de caractères.
- Utilisez le constructeur de classe String pour créer une chaîne triée à partir d'un tableau de caractères.
Exemple 1
Java // Java program to Sort a String Alphabetically // Using toCharArray() method // With using the sort() method // Importing Arrays class from java.util package import java.util.Arrays; // Main class public class GFG { // Method 1 // To sort a string alphabetically public static String sortString(String inputString) { // Converting input string to character array char tempArray[] = inputString.toCharArray(); // Sorting temp array using Arrays.sort(tempArray); // Returning new sorted string return new String(tempArray); } // Method 2 // Main driver method public static void main(String[] args) { // Custom string as input String inputString = 'geeksforgeeks'; String outputString = sortString(inputString); // Print and display commands // Input string System.out.println('Input String : ' + inputString); // Output string System.out.println('Output String : ' + outputString); } }>
Sortir
Input String : geeksforgeeks Output String : eeeefggkkorss>
2B Par en utilisant le méthode sort()- Tri personnalisé
Arrays.sort(char c[]) méthode de tri des caractères en fonction de leur valeur ASCII, nous pouvons définir notre Comparateur pour trier une chaîne.
10 sur 100,00
Illustration:
Input String : techcodeview.com Output String : eeeefGGkkorss>
Procédure:
- Convertir la chaîne d'entrée en Personnage tableau. Il n’existe pas de méthode directe pour le faire. Nous utiliserons la boucle for pour remplir le tableau.
- Utiliser Arrays.sort(T [ ], Comparateur c) méthode pour trier le tableau de caractères. Pour cela, il faut mettre en œuvre comparer() méthode basée sur notre comportement de tri personnalisé.
- Nous pouvons maintenant utiliser StringBuilder pour convertir le tableau Character en String.
Exemple 2
Java // Java Program to Sort a Mixed String Containing // Uppercase and Lowercase Characters // Importing required classes import java.util.Arrays; import java.util.Comparator; // Main class class GFG { // Method 1 // To sort a mixed string public static String sortString(String inputString) { // Converting input string to Character array Character tempArray[] = new Character[inputString.length()]; for (int i = 0; i < inputString.length(); i++) { tempArray[i] = inputString.charAt(i); } // Sort, ignoring case during sorting Arrays.sort(tempArray, new Comparator() { // Méthode 2 // Pour comparer les caractères @Override public int compare(Character c1, Character c2) { // Ignorer la casse return Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2)); } }); // Utilisation de StringBuilder pour convertir un tableau de caractères en // String StringBuilder sb = new StringBuilder(tempArray.length); for (Caractère c : tempArray) sb.append(c.charValue()); return sb.toString(); } // Méthode 3 // Méthode du pilote principal public static void main(String[] args) { // Chaîne d'entrée personnalisée String inputString = 'techcodeview.com'; // Appel de la méthode 1 pour trier la chaîne d'entrée // et stockage dans une chaîne String outputString = sortString(inputString); // Imprimer et afficher les chaînes d'entrée et de sortie System.out.println('Input String : ' + inputString); System.out.println('Output String : ' + outputString); } }>
Sortir
Input String : techcodeview.com Output String : eeeefGGkkorss>
Note:
public int compare(Object o1, Object o2) {} >
- doit retourner -ve si o1 doit venir avant o2
- doit retourner +ve si o1 doit venir après o2
- doit renvoyer 0 si o1 est égal à o2