logo

Ordina una stringa in Java (2 modi diversi)

La classe string non ha alcun metodo che ordini direttamente una stringa, ma possiamo ordinare una stringa applicando altri metodi uno dopo l'altro. La stringa è una sequenza di caratteri. In Java, gli oggetti di String sono immutabili, il che significa una costante e non possono essere modificati una volta creati.

Creazione di una stringa

Esistono due modi per creare una stringa in Java:



  • Stringa letterale
String s = techcodeview.com;>
  • Utilizzando nuovo parola chiave
String s = new String (techcodeview.com);>

Nota: Come sappiamo, String lo è immutabile in Java, quindi nel terzo passaggio dobbiamo creare una nuova stringa.

Metodi:

Esistono due metodi con cui possiamo ordinare alfabeticamente qualsiasi stringa in Java

sostituisci tutto
  1. Senza utilizzare il metodo sort()
  2. Utilizzando il metodo sort()

Illustrazione:

Input string : 'geeksforgeeks' Output string : 'eeeefggkkorss'>

Ora discutiamo dei metodi e implementiamo lo stesso.

Metodo 1: Senza utilizzare il metodo sort()

Qui definiremo un approccio per ordinare una stringa senza utilizzare alcuna logica predefinita. Quindi, diventa anche un approccio importante dal punto di vista percettivo dell’intervista.

restituendo un array java

Procedura:

  1. Converti una stringa in un array con l'aiuto del metodo toCharArray() della classe String
  2. Ora usa i cicli nidificati per verificare lo scambio di elementi di un array.
  3. Stampa questi elementi dell'array di caratteri.

Esempio

Giava
// 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 */>

Produzione:

eeeefggkkorss>

Complessità temporale : O(n * log n). (dove 'n' è la dimensione della stringa di input.)


Metodo 2: Per usando il metodo sort()

2A Utilizzando il metodo sort()- cernita naturale

Procedura:

  1. La logica principale è quella di metodo toCharArray() della classe String sulla stringa di input per creare un array di caratteri per la stringa di input.
  2. Ora usa Array.sort(char c[]) metodo per ordinare l'array di caratteri.
  3. Utilizzare il costruttore della classe String per creare una stringa ordinata da un array di caratteri.

Esempio 1

Giava
// 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);  } }>

Produzione
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B di usando il metodo sort()- Ordinamento personalizzato

Array.sort(char c[]) metodo di ordinamento dei caratteri in base al loro valore ASCII, possiamo definire il nostro metodo personalizzato Comparatore per ordinare una stringa.

Illustrazione:

Input String : techcodeview.com Output String : eeeefGGkkorss>

Procedura:

git checkout
  1. Converti la stringa di input in Carattere vettore. Non esiste un metodo diretto per farlo. Utilizzeremo il ciclo for per riempire l'array.
  2. Utilizzo Arrays.sort(T [ ], Comparatore c) metodo per ordinare l'array di caratteri. Per questo dobbiamo attuare confrontare() metodo basato sul nostro comportamento di ordinamento personalizzato.
  3. Ora possiamo usare StringBuilder per convertire l'array Character in String.

Esempio 2

Giava
// 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() { // Metodo 2 // Per confrontare i caratteri @Override public int compare(Character c1, Character c2) { // Ignora maiuscole e minuscole return Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2));  } });  // Utilizzo di StringBuilder per convertire l'array di caratteri in // String StringBuilder sb = new StringBuilder(tempArray.length);  for (Carattere c: tempArray) sb.append(c.charValue());  restituisce sb.toString();  } // Metodo 3 // Metodo driver principale public static void main(String[] args) { // Stringa di input personalizzata String inputString = 'techcodeview.com';  // Chiama il metodo 1 per ordinare la stringa di input // e memorizza in una stringa String outputString = sortString(inputString);  // Stampa e visualizza le stringhe di input e output System.out.println('Input String : ' + inputString);  System.out.println('Stringa di output: ' + outputString);  } }>

Produzione
Input String : techcodeview.com Output String : eeeefGGkkorss>

Nota:

public int compare(Object o1, Object o2) {}>
  • deve restituire -ve se o1 deve precedere o2
  • deve restituire +ve se o1 deve venire dopo o2
  • deve restituire 0 se o1 è uguale a o2