Embaralhar String com Collections.shuffle?

Bem, eu fiz um pequeno exercício aqui para embaralhar uma String, até aí tudo bem, mas eu usei StringBuilder e um laço for para isso, mas eu sei que existe o Collections.shuffle…
Mas o que eu reparei é que eu não consigo fazer nenhuma List.

O meu código atual é esse.

[code]public static String shuffle(String origem) {
Random r = new Random();
StringBuilder org = new StringBuilder(origem);
StringBuilder fim = new StringBuilder();
int tamanho = org.length();

	for (int i=0;i<tamanho;i++) {
		int rch = r.nextInt(org.length());
		fim.append(org.charAt(rch));
		org = org.deleteCharAt(rch);
	}    	
	return fim.toString();    	 
}[/code]

Eu queria algo mais ou menos assim:

public static String shuffle(String origem) { List<char> lista = new ArrayList<char>(Arrays.asList(origem.toCharArray())); Collections.shuffle(lista); return ... }

O problema é que eu não consigo fazer uma lista com , nem com .
Esse é o único jeito de fazer o exercício? Vou ter que realmente usar um laço for com StringBuilder ao em vez de Collections.shuffle?

Obrigado para quem me responder =)

Isso não funciona?public static String shuffle(String origem) { char[] arr = origem.toCharArray(); Collections.shuffle(Arrays.asList(arr)); return new String(arr); }
EDIT: hmm. Há algo errado ainda. Deixa eu ver o que é.

Aparentemente, não funcionou.

found : void
required: java.util.List<java.lang.Character>
List lista = Collections.shuffle(Arrays.asList(arr));

Listas são de objetos. Use List
Arrays podem ser primitivos ou não. Utilize um array de char que pesa menos que uma lista de Character

O problema é que não existe um Arrays.suffle
Portanto tem que converter para List . Na mão!, porque Arrays.asList tb não irá funcionar (um char não é um Character e viceversa

O mais eficietne seria randomizar o array , mas aqui fica o exemplo com suffle

[code]
char[] caracteres = “String a embaralhar”.toCharArray();

List ocharaters = new ArrayList(caracteres.length);

for (char c: caracteres ){
ocharaters.add©; // autoboxing
}

Collections.suffle(ocharaters);

for ( int i =0; i < caracteres.length ; i++ ){
caracteres[i] = ocharaters.get(i); // unboxing
}

String strEmbaralhada = new String(caracteres);[/code]

Bom, acho que minha dúvida foi resolvida com o código acima

Mas de qualquer modo meu código vai ficar um pouquinho longo, mas vou ficar com o meu código mesmo.
E o que percebi também é que eu estava fazendo Arrays.asList( str.toCharArray() ), e isso seria uma “Lista de arrays” porque str.toCharArray() retorna char[] e não os argumentos para asList :stuck_out_tongue:

No fim acabei fazendo o programa assim mesmo.