Ordene una sola Cadena en Java

¿Hay una manera nativa de ordenar una cadena por su contenido en java? P.ej

String s = "edcba" -> "abcde" 

toCharArray seguido de Arrays.sort seguido de una llamada de constructor de cadenas:

 import java.util.Arrays; public class Test { public static void main(String[] args) { String original = "edcba"; char[] chars = original.toCharArray(); Arrays.sort(chars); String sorted = new String(chars); System.out.println(sorted); } } 

EDITAR: Como lo señala el tackline, esto fallará si la cadena contiene pares sustitutos o, de hecho, caracteres compuestos (acento + e como caracteres separados) etc. En ese punto, se vuelve mucho más difícil … espero que no lo necesites 🙂 Además, esto es solo ordenar por ordinal, sin tomar en cuenta las mayúsculas, los acentos o cualquier otra cosa.

No, no hay un método de cadena incorporado. Puede convertirlo en una matriz char, ordenarlo usando Arrays.sort y convertirlo de nuevo en una cadena.

 String test= "edcba"; char[] ar = test.toCharArray(); Arrays.sort(ar); String sorted = String.valueOf(ar); 

O bien, cuando desee tratar correctamente las cosas específicas de la configuración regional, como mayúsculas y caracteres acentuados:

 import java.text.Collator; import java.util.Arrays; import java.util.Comparator; import java.util.Locale; public class Test { public static void main(String[] args) { Collator collator = Collator.getInstance(new Locale("fr", "FR")); String original = "éDedCBcbAàa"; String[] split = original.split(""); Arrays.sort(split, collator); String sorted = ""; for (int i = 0; i < split.length; i++) { sorted += split[i]; } System.out.println(sorted); // "aAàbBcCdDeé" } } 

En Java 8 se puede hacer con:

 String s = "edcba".chars() .sorted() .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); 

Una alternativa un poco más corta que funciona con una secuencia de cadenas de longitud uno (cada carácter en la cadena no ordenada se convierte en una cadena en la secuencia) es:

 String sorted = Stream.of("edcba".split("")) .sorted() .collect(Collectors.joining()); 
  String a ="dgfa"; char [] c = a.toCharArray(); Arrays.sort(c); return new String(c); 

Tenga en cuenta que esto no funcionará como se espera si se trata de una Cadena de mayúsculas y minúsculas (se pondrá mayúscula antes que minúsculas). Puede pasar un comparador al método Sort para cambiar eso.

Un enfoque más crudo sin usar el método sort Arrays.sort. Esto está utilizando la ordenación por inserción.

 public static void main(String[] args){ String wordSt="watch"; char[] word=wordSt.toCharArray(); for(int i=0;i<(word.length-1);i++){ for(int j=i+1;j>0;j--){ if(word[j] 

Convertir a una matriz de caracteres → Ordenar → Volver a convertir a cadena :

 String s = "edcba"; char[] c = s.toCharArray(); // convert to array of chars java.util.Arrays.sort(c); // sort String newString = new String(c); // convert back to String System.out.println(newString); // "abcde" 

Procedimiento:

  1. Al principio convierte la cadena en matriz de caracteres
  2. Luego ordena la matriz de caracteres
  3. Convierta la matriz de caracteres a cadena
  4. Imprimir la cadena

Fragmento de código:

  String input = "world"; char[] arr = input.toCharArray(); Arrays.sort(arr); String sorted = new String(arr); System.out.println(sorted); 
 public static void main(String[] args) { String str = "helloword"; char[] arr; List l = new ArrayList(); for (int i = 0; i < str.length(); i++) { arr = str.toCharArray(); l.add(arr[i]); } Collections.sort(l); str = l.toString(); System.out.println(str); str = str.replaceAll("\\[", "").replaceAll("\\]", "") .replaceAll("[,]", ""); System.out.println(str); } 

Sin usar colecciones en Java:

 import java.util.Scanner; public class SortingaString { public static String Sort(String s1) { char ch[]=s1.toCharArray(); String res=" "; for(int i=0; i=ch[j]) { char m=ch[i]; ch[i]=ch[j]; ch[j]=m; } } res=res+ch[i]; } return res; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("enter the string"); String s1=sc.next(); String ans=Sort( s1); System.out.println("after sorting=="+ans); } } 

Salida:

ingrese la cadena ==

clasificación

después de ordenar == ginorst