Existe-t-il un moyen natif de trier une chaîne de caractères par son contenu en java ? Par exemple
String s = "edcba" -> "abcde"
Existe-t-il un moyen natif de trier une chaîne de caractères par son contenu en java ? Par exemple
String s = "edcba" -> "abcde"
toCharArray
suivi par Arrays.sort
suivi d'un appel au constructeur String :
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);
}
}
EDIT : Comme le souligne tackline, cela échouera si la chaîne contient des paires de substituts ou des caractères composites (accent + e comme caractères séparés), etc. A ce stade, cela devient beaucoup plus difficile... j'espère que vous n'en aurez pas besoin :) En outre, il s'agit simplement d'un classement par ordre ordinal, sans tenir compte des majuscules, des accents ou de tout autre élément.
Non, il n'y a pas de méthode String intégrée. Vous pouvez le convertir en un tableau de caractères, le trier en utilisant Arrays.sort et le reconvertir en String.
String test= "edcba";
char[] ar = test.toCharArray();
Arrays.sort(ar);
String sorted = String.valueOf(ar);
Ou, lorsque vous voulez traiter correctement des éléments spécifiques à la région comme les majuscules et les caractères accentués :
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, cela peut être fait avec :
String s = "edcba".chars()
.sorted()
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
Une alternative légèrement plus courte qui fonctionne avec un flux de chaînes de longueur un (chaque caractère de la chaîne non triée est converti en une chaîne dans le flux) est la suivante :
String sorted =
Stream.of("edcba".split(""))
.sorted()
.collect(Collectors.joining());
Convertir en tableau de caractères → Trier → Reconvertir en String :
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"
Une approche plus brute sans utiliser la méthode sort Arrays.sort. Il s'agit d'utiliser le tri par insertion.
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]<word[j-1]){
char temp=word[j-1];
word[j-1]=word[j];
word[j]=temp;
}
}
}
wordSt=String.valueOf(word);
System.out.println(wordSt);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.