1. ホーム
  2. java

[解決済み] Collections.shuffle(...)を使わずに文字列内の文字をシャッフルするには?

2022-02-16 13:07:14

質問

文字列中の文字をシャッフルするにはどうしたらよいでしょうか(例えばhelloはehlolやlleoh、...になります)。を使いたくありません。 Collections.shuffle(...) というメソッドがありますが、もっとシンプルなものはないでしょうか?

どのように解決するのですか?

もっと簡単な方法はないでしょうか。しかし、Math.rand()関数を使って、置換せずに文字の長さの範囲内で乱数を生成すれば、シャッフルされた出力を得ることができます。

public class Shuffle {
    public static void main(String[] args) {
        Shuffle s = new Shuffle();
        s.shuffle("hello");

    }
    public void shuffle(String input){
        List<Character> characters = new ArrayList<Character>();
        for(char c:input.toCharArray()){
            characters.add(c);
        }
        StringBuilder output = new StringBuilder(input.length());
        while(characters.size()!=0){
            int randPicker = (int)(Math.random()*characters.size());
            output.append(characters.remove(randPicker));
        }
        System.out.println(output.toString());
    }
}
/*
Sample outputs
hlleo
llheo
leohl
lleho
*/