String alphabetisch "ordnen"

Djinndrache

Bekanntes Mitglied
Hey,

gibt es eine geschickte Methode einen String alphabetisch zu "ordnen"?

zB habe ich:

Java:
String s = "java";

und möchte im Endeffekt folgendes haben: "aajv", quasi einfach den String alphabetisch sortieren. Es darf angenommen werden, dass der String nur die kleinen Buchstaben a-z enthält.
 
Z.B. so:

Java:
     String   sSrc = "java";
     char []  arCh = sSrc.toCharArray();
     java.util.Arrays.sort(arCh);
     String   sDst = String.valueOf(arCh);
     System.out.println(sDst);

;-)

VG ROlf
 
Schade, da kam ich ein paar Minuten zu spät🙁

[JAVA=42]package test;

import java.util.Arrays;

public class StrOrd
{
public static void main(String[] args)
{
String s = "java";
StringBuffer sb = new StringBuffer(s);
String[]sa = new String[sb.length()];
for(int i = 0; i < sb.length(); i++)
{
sa = sb.substring(i, i+1);
}
Arrays.sort(sa);
String s2 = "";
for(int i = 0; i < sa.length; i++)
{
s2 += sa;
}
System.out.println(s2);
}

}[/code]

Aber war wohl sowieso zu kompliziert🙂
 
spaßeshalber erstelle mal mal länger strings und teste exakt die beiden methoden (insbesondere ohne Z.53-55 u. 59-61 zu verändern) auf ihre schnelligkeit. 😉

wenns nich so spät wär, würd ich des auch machen
 
src=source u. dst=destination gibt es schon, aber in der kombination einfach nicht so toll hehe ja - wenn sonst nix is


sSrc -> String Source
sDst -> String Dest
arCh -> Array char
Und sogar mit etwas Camel-Case.

Leute, ihr habt Probleme. Um die Zeit mach ich mir keine größeren Gedanken um Namen.
Wenn ich gewusst hätte, dass das um diese Zeit noch so eine Diskussion nach sich zieht,
hätte ich sicher erst noch ne Nacht darüber geschlafen. ;-)

Ich dachte allerdings, es ging um eine schnelle, kurze Lösung und nicht um Rechtschreibung. 😉
 
Java:
import java.util.Arrays;

public class StringSorttt {

    public static void main(String[] args) {
        String s = new String(new char[5000]);

        long[] la = new long[2 * 8];
        int i = 0;
        int j = la.length - 1;
        while (i <= j) {
            if (i >= la.length / 2) {
                long t1 = System.currentTimeMillis();
                m2(s);
                la[j--] = System.currentTimeMillis() - t1;
            } else if (j < la.length / 2) {
                long t1 = System.currentTimeMillis();
                m1(s);
                la[i++] = System.currentTimeMillis() - t1;
            } else if (Math.random() < 0.5) {
                long t1 = System.currentTimeMillis();
                m2(s);
                la[j--] = System.currentTimeMillis() - t1;
            } else {
                long t1 = System.currentTimeMillis();
                m1(s);
                la[i++] = System.currentTimeMillis() - t1;
            }
        }

        System.out.println(Arrays.toString(la));
    }

    public static String m1(String s) {
        String[] sa = new String[s.length()];
        for (int i = 0; i < s.length(); i++) {
            sa[i] = s.substring(i, i + 1);
        }
        Arrays.sort(sa);
        String s2 = "";
        for (int i = 0; i < sa.length; i++) {
            s2 += sa[i];
        }
        return s2;
    }

    public static String m2(String s) {
        char[] ca = s.toCharArray();
        Arrays.sort(ca);
        return ca.toString();
    }
}

Code:
[112, 107, 102, 104, 104, 102, 103, 103, 0, 0, 0, 0, 0, 1, 2, 2]

das steht dann wohl für sich und mit mehr elem. konnt ich gar kein praktisches ergebnis mehr erzielen 😉

(geringfügige änderungen vorgenommen)
 
sSrc -> String Source
sDst -> String Dest
arCh -> Array char
Und sogar mit etwas Camel-Case.

Leute, ihr habt Probleme. Um die Zeit mach ich mir keine größeren Gedanken um Namen.
Wenn ich gewusst hätte, dass das um diese Zeit noch so eine Diskussion nach sich zieht,
hätte ich sicher erst noch ne Nacht darüber geschlafen. ;-)

Ich dachte allerdings, es ging um eine schnelle, kurze Lösung und nicht um Rechtschreibung. 😉

Gerade bei Anfängern sollte man mit gutem Beispiel vorangehen, so dass sie es gleich richtig lernen.
Es geht ja nicht um Rechtschreibfehler sondern um die von dir verwendete ungarische Notation, welche man nicht verwenden sollte, wenn man sich an die Coding Conventions hält.
 
Z.B. so:

Java:
     String   sSrc = "java";
     char []  arCh = sSrc.toCharArray();
     java.util.Arrays.sort(arCh);
     String   sDst = String.valueOf(arCh);
     System.out.println(sDst);

;-)

VG ROlf
Eher wohl
Java:
public static String sort(String str) { // wobei man da natürlich auch über str oder string oder input diskutieren kann ;)
    char[] chars = str.toCharArray();
    Arrays.sort(chars);
    return String.valueOf(chars);
}
 
Ja, in der aktuellen Implementation der Standard API wird schlussendlich ein neues String-Objekt erzeugt. Aber man weiss nie, wann diese Implementation geändert wird. Konkret gehts um den String Pool. Verwende einfach die statischen Methoden und überlass es der VM, dass möglichst wenige Stringobjekte erzeugt werden.
 
der string-pool hat aber nix mit der übergabe vo char-arrays gemeinsam, sondern bei string-literalen und eine änderung der implementierung gab es auch noch nie

aber du hast deine ich meine meinug einigen wir uns das wir uns ununeinig sin😱
 
der string-pool hat aber nix mit der übergabe vo char-arrays gemeinsam, sondern bei string-literalen und eine änderung der implementierung gab es auch noch nie

Richtig, aber man könnte sicherlich etwas mehr Magie rein bringen, um bei solchen Sachen Memory zu sparen 😉

Und wenn du ein [c]static Foo createFoo()[/c] anbietest, aber den Konstruktor von [c]Foo[/c] wegen Spezialfällen zur Verfügung stellst, dann gehst du auch nicht davon aus, dass man in Standardfällen den Konstruktor von aussen verwendet. Ein gutes Beispiel kann ich aber gerade nicht nennen, fällt mir nichts ein. In der String-Klasse scheint es aber so zu sein 😉

aber du hast deine ich meine meinug einigen wir uns das wir uns ununeinig sin
/sign 🙂
/quit
 

Neue Themen


Zurück
Oben