Sorteer een enkele tekenreeks in Java

Is er een native manier om een string te sorteren op inhoud in java? bijv.

String s = "edcba"  ->  "abcde"

Antwoord 1, autoriteit 100%

toCharArraygevolgd door Arrays.sortgevolgd door een String constructor-aanroep:

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: Zoals tackline aangeeft, zal dit mislukken als de string surrogaatparen bevat of inderdaad samengestelde karakters (accent + e als afzonderlijke tekens) enz. Op dat moment wordt het een stuk moeilijker… hopelijk heb je dat niet nodig dit 🙂 Bovendien is dit gewoon ordinaal bestellen, zonder rekening te houden met hoofdletters, accenten of iets anders.


Antwoord 2, autoriteit 23%

Nee, er is geen ingebouwde String-methode. Je kunt het converteren naar een char-array, het sorteren met Arrays.sort en dat weer omzetten in een String.

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

Of, als je correct wilt omgaan met landspecifieke zaken zoals hoofdletters en tekens met accenten:

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é"
  }
}

Antwoord 3, Autoriteit 18%

In Java 8 kan het worden gedaan met:

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

Een enigszins korter alternatief dat werkt met een stroom van lengte van de lengte (elk personage in de ongesorteerde string wordt omgezet in een tekenreeks in de stroom) is:

String sorted =
    Stream.of("edcba".split(""))
        .sorted()
        .collect(Collectors.joining());

Antwoord 4, Autoriteit 10%

converteren naar array van Chars → Sorteren → Converteer terug naar 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"

Antwoord 5, Autoriteit 8%

Een meer ruwe benadering zonder de sort Arrays.sort-methode te gebruiken.
Dit maakt gebruik van invoegsortering.

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

Antwoord 6, autoriteit 7%

   String a ="dgfa";
    char [] c = a.toCharArray();
    Arrays.sort(c);
    return new String(c);

Merk op dat dit niet werkt zoals verwacht als het een string met gemengde hoofdletters is (er worden hoofdletters voor kleine letters geplaatst). Je kunt een comparator doorgeven aan de Sort-methode om dat te veranderen.


Antwoord 7

Procedure:

  1. Converteer eerst de tekenreeks naar char-array
  2. Sorteer vervolgens de tekenreeks
  3. Converteer de tekenreeks naar tekenreeks
  4. Druk de tekenreeks af

Codefragment:

   String input = "world";
    char[] arr = input.toCharArray();
    Arrays.sort(arr);
    String sorted = new String(arr);
    System.out.println(sorted);

Antwoord 8

Vraag: sorteer een string in java

public class SortAStringInJava {
    public static void main(String[] args) {
        String str = "Protijayi";
// Method 1
        str = str.chars() // IntStream
                .sorted().collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
        System.out.println(str);
        // Method 2
        str = Stream.of(str.split(" ")).sorted().collect(Collectors.joining());
        System.out.println(str);
    }
}

Antwoord 9

str.chars().boxed().map(Character::toString).sorted().collect(Collectors.joining())

of

s.chars().mapToObj(Character::toString).sorted().collect(Collectors.joining())

of

Arrays.stream(str.split("")).sorted().collect(Collectors.joining())

Antwoord 10

Een oplossing die de Stream API gebruikt en ook aanvullende Unicode-tekens verwerkt:

public static String sort(final String s) {
    return s.codePoints()
            .sorted()
            .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
            .toString();
}

Antwoord 11

public static void main(String[] args) {
    String str = "helloword";   
    char[] arr;
    List<Character> l = new ArrayList<Character>();
    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);
}

Antwoord 12

Zonder verzamelingen in Java te gebruiken:

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.length ; i++)
        {
            for(int j=i+1;j<ch.length; j++)
            {
                if(ch[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);
    }
}

Uitvoer:

voer de tekenreeks in==

sorteren

na sorteren== ginorst

Other episodes