# String Elemente bzw. Buchstaben miteinander vertauschen?



## stockhausen (27. Mai 2010)

Hallo Zusammen,

ich habe keine Idee, wie ich ein Methode schreiben muss, der einen beliebigen String einliest und die einzelnen Buchstaben miteinander vertauscht! 

String str = "abc";

Die Methode soll folgendes ausgeben: cab oder acb

Hat jemand eine Idee, wie ich mein Vorhaben realisieren kann?

Grüße,
Michael


----------



## Schandro (27. Mai 2010)

Eine Möglichkeit:

```
public static String shuffleString(String s){
		StringBuilder src = new StringBuilder(s);
		StringBuilder result = new StringBuilder();
		while(src.length()>0){
			int randomIndex = (int) (Math.random()*src.length());
			result.append(src.charAt(randomIndex));
			src.delete(randomIndex, randomIndex+1);
		}
		return result.toString();
	}
```


----------



## Antoras (27. Mai 2010)

Du hast eine sehr ungenaue Beschreibung deines Vorhabens abgegeben, da kann man dir schwer weiterhelfen.



> Die Methode soll folgendes ausgeben: cab oder acb


Warum gerade diese beiden? Es gibt insgesamt sechs Kombinationen: abc, acb, bac, bca, cab, cba.

Da aber abc ja der eingelesene String ist entfällt die erste Möglichkeit.

Genaugenomen gibt es dann 
	
	
	
	





```
3! - 1 = 5
```
 Kombinationen (! = Fakultät). Bei eines String mit 4 Zeichen wären es schon 
	
	
	
	





```
4! - 1 = 23
```
 und bei 5 Zeichen 119. Du siehst: Die Anzahl deiner möglichen Kombinationen steigt exponentiell an.

Es gibt natürlich noch ein paar Einschränkungen: Dürfen die Buchstaben mehr als einmal an einer Position im String stehen? Was ist wenn mehrere gleiche Buchstaben vorhanden sind?

Wenn du das realisieren möchtest,dann ist das ganze über einen einfachen Brute-Force-Algorithmus zu lösen.

EDIT: Oder magst du nur eine Möglichkeit? Dann hat dir Schandro ja eine Lösung gepostet.


----------



## Nicer (27. Mai 2010)

Antoras hat gesagt.:


> Du hast eine sehr ungenaue Beschreibung deines Vorhabens abgegeben, da kann man dir schwer weiterhelfen.



Das Vorhaben ist ja wohl Glaßklar ! Er will eine Methode die ihm aus einem Eingangsstring einen aus den Eingangsstring-buchstaben generierten randomstring ausgibt. 

Grober Ablauf der Methode :

Eingangsstring -> Char[] Parsen
Randomzahl generieren
Zufälligen Char[] per Zufallszahl auswählen
Char[] in Ausgangsstring einsetzen
Ausgangsstring ausgeben


----------



## faetzminator (27. Mai 2010)

Nicer hat gesagt.:


> Eingangsstring -> Char[] Parsen
> Randomzahl generieren
> Zufälligen Char[] per Zufallszahl auswählen
> Char[] in Ausgangsstring einsetzen
> Ausgangsstring ausgeben



Wtf? Nunja, wenn man das ganze shuffeln wollen würde, gings so 
(Leider gibts keine shuffle-Methode in Arrays, sondern nur in Collections, und Arrays.asList() mit byte[] will nicht so... - auch kann man Arrays.sort() bei primitiven Arrays keinen Comparator mitgeben  )

```
public static String shuffle(String str) {
    List<Character> chars = new ArrayList<Character>();
    for (int i = 0; i < str.length(); i++) {
        chars.add(str.charAt(i));
    }
    Collections.shuffle(chars);
    StringBuilder sb = new StringBuilder();
    for (char c : chars) {
        sb.append(c);
    }
    return sb.toString();
}
```


----------



## Nicer (27. Mai 2010)

faetzminator hat gesagt.:


> Wtf? Nunja, wenn man das ganze shuffeln wollen würde, gings so



Er will es shuffeln oder steh ich aufm schlauch ?:bahnhof:


----------



## stockhausen (27. Mai 2010)

Vielen Dank Zusammen!! :toll:

Ihr habt es richtig verstanden. Ich wollte den eingehenden String shuffeln und wieder ausgeben. 

Grüße,
Michael


----------

