14 Stimmen

Sortiere String "13,5,8,4,2,1,9" in aufsteigender Reihenfolge 1,2,4,5,8,9,13 in Java

Wie kann ich einen String "13,5,8,4,2,1,9" in aufsteigender Reihenfolge sortieren, um 1,2,4,5,8,9,13 zu erhalten?

27voto

Jon Skeet Punkte 1325502
  • Trennen Sie den String durch Kommas
  • Analysieren Sie jeden Teilstring in eine Ganzzahl
  • Sortieren Sie die resultierende Sammlung
  • Wenn das Ergebnis einen String sein soll (es ist nicht klar), wandeln Sie jede Ganzzahl wieder in einen String um und fügen Sie sie mit Kommas zusammen.

Wenn einer dieser Schritte Ihnen Schwierigkeiten bereitet, seien Sie bitte genauer.

14voto

Marcelo Cantos Punkte 173498
  1. Teilen Sie es in ein Array von Elementen mit String.split().
  2. Wandeln Sie es in ein Array von Zahlen mit Integer.valueOf() um.
  3. Sortieren Sie das Array.
  4. Verknüpfen Sie alles wieder zu einem StringBuilder.

8voto

Jorn Punkte 17575

Als eine Liner, die Google Collections verwendet (aktualisiert mit Kevins Vorschlag)

Joiner.on(",").join(Ordering.natural().onResultOf(new Function() {
    @Override
    public Integer apply(String from) {
        return Integer.valueOf(from);
    }
}).sortedCopy(Arrays.asList("4,2,7,9,1".split(","))));
  • Teilen mit String.split()
  • Umwandeln in Integer mit einer Function (weiß jemand, ob es dafür irgendwo eine Konstante gibt?)
  • Sortieren mit einem TreeSet und natürlicher Ordnung
  • Teile zusammenfügen und zurück in einen String umwandeln mit Joiner

(alte Version)

Joiner.on(',').join(
    Sets.newTreeSet(
        Iterables.transform(
            Arrays.asList("13,5,8,4,2,1,9".split(",")),
            new Function() {
                @Override
                public Integer apply(String from) {
                    return Integer.parseInt(from);
                }}))));

6voto

polygenelubricants Punkte 362173
String s = "13,5,8,4,2,1,9";
String[] arr = s.split(",");
Arrays.sort(arr, new Comparator() {
   @Override public int compare(String s1, String s2) {
      return Integer.parseInt(s1) - Integer.parseInt(s2);
   }
});
s = Arrays.toString(arr).replaceAll("[\\[ \\]]", "");

Diese Lösung verwendet:

3voto

geffchang Punkte 3226

Ich würde den String mit StringTokenizer tokenisieren,
die Werte parsen (mit Integer.parseInt),
dann die Ergebnisse mit Arrays.sort sortieren.
Zuletzt den String neu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X