logo

Ordenar una cadena en Java (2 formas diferentes)

La clase string no tiene ningún método que ordene directamente una cadena, pero podemos ordenar una cadena aplicando otros métodos uno tras otro. La cadena es una secuencia de caracteres. En Java, los objetos de String son inmutables, lo que significa que son constantes y no se pueden cambiar una vez creados.

Creando una cadena

Hay dos formas de crear una cadena en Java:



  • Literal de cadena
String s = techcodeview.com;>
  • Usando nuevo palabra clave
String s = new String (techcodeview.com);>

Nota: Como sabemos que String es inmutable en java, por lo tanto, en el tercer paso tenemos que crear una nueva cadena.

Métodos:

Existen dos métodos con los que podemos ordenar cualquier cadena en java alfabéticamente

algoritmo para búsqueda binaria
  1. Sin utilizar el método sort()
  2. Al utilizar el método ordenar()

Ilustración:

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

Ahora analicemos los métodos e implementemos los mismos.

Método 1: Sin utilizar el método sort()

Aquí presentaremos un enfoque para ordenar una cadena sin utilizar ninguna lógica predefinida. Por lo tanto, también se convierte en un enfoque importante desde el punto de vista perceptivo de la entrevista.

char tostring java

Procedimiento:

  1. Convierta una cadena en una matriz con la ayuda del método toCharArray() de la clase String
  2. Ahora use bucles anidados para verificar si hay elementos intercambiables de una matriz.
  3. Imprima estos elementos de la matriz de caracteres.

Ejemplo

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

Producción:

eeeefggkkorss>

Complejidad del tiempo : O(n * iniciar sesión n). (donde 'n' es el tamaño de la cadena de entrada).


Método 2: por utilizando el método ordenar()

2A Al utilizar el método sort()- clasificación natural

Procedimiento:

  1. La lógica principal es método toCharArray() de la clase String sobre la cadena de entrada para crear una matriz de caracteres para la cadena de entrada.
  2. Ahora usa Arrays.sort(char c[]) Método para ordenar una matriz de caracteres.
  3. Utilice el constructor de la clase String para crear una cadena ordenada a partir de una matriz de caracteres.

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

Producción
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B por utilizando el método sort()- Clasificación personalizada

Arrays.sort(char c[]) método de clasificación de caracteres según su valor ASCII, podemos definir nuestra costumbre Comparador para ordenar una cadena.

Ilustración:

lista de arreglo
Input String : techcodeview.com Output String : eeeefGGkkorss>

Procedimiento:

  1. Convertir cadena de entrada a Personaje formación. No existe un método directo para hacerlo. Usaremos el bucle for para llenar la matriz.
  2. Usar Arrays.sort(T [ ], Comparador c) Método para ordenar la matriz de caracteres. Para ello debemos tener que implementar comparar() método basado en nuestro comportamiento de clasificación personalizado.
  3. Ahora podemos usar StringBuilder para convertir la matriz de caracteres en cadena.

Ejemplo 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étodo 2 // Para comparar caracteres @Override public int compare(Character c1, Character c2) { // Ignorando mayúsculas y minúsculas return Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2));  } });  // Uso de StringBuilder para convertir una matriz de caracteres a // String StringBuilder sb = new StringBuilder(tempArray.length);  para (Carácter c: tempArray) sb.append(c.charValue());  devolver sb.toString();  } // Método 3 // Método del controlador principal public static void main(String[] args) { // Cadena de entrada personalizada String inputString = 'techcodeview.com';  // Llamar al método 1 para ordenar la cadena de entrada // y almacenar en una cadena String salidaString = sortString(inputString);  // Imprime y muestra las cadenas de entrada y salida System.out.println('Input String : ' + inputString);  System.out.println('Cadena de salida: ' + Cadena de salida);  } }>

Producción
Input String : techcodeview.com Output String : eeeefGGkkorss>

Nota:

public int compare(Object o1, Object o2) {}>
  • tiene que regresar -ve si o1 tiene que venir antes que o2
  • tiene que regresar +ve si o1 tiene que venir después de o2
  • tiene que devolver 0 si o1 es igual a o2