logo

Ordena una cadena en Java (2 maneres diferents)

La classe de cadena no té cap mètode que ordeni directament una cadena, però podem ordenar una cadena aplicant altres mètodes un darrere l'altre. La cadena és una seqüència de caràcters. A java, els objectes de String són immutables, cosa que significa una constant i no es poden canviar un cop creats.

Creació d'una cadena

Hi ha dues maneres de crear una cadena a Java:



  • Cadena literal
String s = techcodeview.com;>
  • Utilitzant nou paraula clau
String s = new String (techcodeview.com);>

Nota: Com sabem que String és immutable a java, per tant, en el tercer pas hem de crear una cadena nova.

Mètodes:

Existeixen dos mètodes amb els quals podem ordenar qualsevol cadena en java alfabèticament

com imprimir java
  1. Sense utilitzar el mètode sort().
  2. Mitjançant l'ús de mètode sort().

Il·lustració:

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

Ara parlem dels mètodes i implementem el mateix.

Mètode 1: Sense utilitzar el mètode sort().

Aquí establirem un enfocament per ordenar una cadena sense utilitzar cap lògica predefinida. Per tant, també es converteix en un enfocament important des d'una visió perceptiva de l'entrevista.

com obrir un fitxer amb java

Procediment:

  1. Converteix string en una matriu amb l'ajuda del mètode toCharArray() de la classe String
  2. Ara feu servir bucles imbricats per comprovar si hi ha elements d'intercanvi d'una matriu.
  3. Imprimeix aquests elements de matriu de caràcters.

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

Sortida:

eeeefggkkorss>

Complexitat temporal : O(n * log n). (on 'n' és la mida de la cadena d'entrada.)


Mètode 2: per utilitzant el mètode sort().

2A Mitjançant l'ús de mètode d'ordenació () classificació natural

Procediment:

  1. La lògica principal és mètode toCharArray(). de la classe String sobre la cadena d'entrada per crear una matriu de caràcters per a la cadena d'entrada.
  2. Ara utilitza Arrays.sort(car c[]) mètode per ordenar la matriu de caràcters.
  3. Utilitzeu el constructor de classe String per crear una cadena ordenada a partir d'una matriu de caràcters.

Exemple 1

protocol udp
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);  } }>

Sortida
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B Per utilitzant el mètode d'ordenació () Classificació personalitzada

Arrays.sort(car c[]) mètode d'ordenació dels caràcters en funció del seu valor ASCII, podem definir el nostre costum Comparador per ordenar una cadena.

Il·lustració:

Input String : techcodeview.com Output String : eeeefGGkkorss>

Procediment:

  1. Converteix la cadena d'entrada a Personatge matriu. No hi ha un mètode directe per fer-ho. Utilitzarem el bucle for per omplir la matriu.
  2. Ús Arrays.sort(T [ ], Comparador c) mètode per ordenar la matriu de caràcters. Per a això, hem d'haver d'implementar compara () mètode basat en el nostre comportament d'ordenació personalitzada.
  3. Ara podem utilitzar StringBuilder per convertir la matriu de caràcters a 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ètode 2 // Per comparar caràcters @Override public int compare(Caràcter c1, Caràcter c2) { // Ignorant el retorn de majúscules i minúscules Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2));  }});  // Utilitzant StringBuilder per convertir la matriu de caràcters a // String StringBuilder sb = new StringBuilder(tempArray.length);  for (Caracter c: tempArray) sb.append(c.charValue());  retornar sb.toString();  } // Mètode 3 // Mètode del controlador principal public static void main(String[] args) { // Cadena d'entrada personalitzada String inputString = 'techcodeview.com';  // Crida al mètode 1 per ordenar la cadena d'entrada // i emmagatzemar en una cadena String outputString = sortString(inputString);  // Imprimeix i mostra les cadenes d'entrada i sortida System.out.println('Cadena d'entrada: ' + cadena d'entrada);  System.out.println('Cadena de sortida: ' + cadena de sortida);  } }>>>  
Sortida
Input String : techcodeview.com Output String : eeeefGGkkorss>

Nota:

han de tornar -ve si o1 ha d'anar abans que o2
  • han de tornar +ve si o1 ha de venir després de o2
  • Cal tornar 0 si o1 és igual a o2