如何在不使用 Collections.shuffle(...) 的情况下打乱字符串中的字符?

新手上路,请多包涵

我如何打乱字符串中的字符(例如,hello 可以是 ehlol 或 lleoh 或…)。我不想用 Collections.shuffle(...) 方法,有没有更简单的?

原文由 user339108 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 689
2 个回答

我不知道更简单的事情。但是您可以使用 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
*/

原文由 bragboy 发布,翻译遵循 CC BY-SA 2.5 许可协议

表现不佳,但在我看来可读性很强:

 public static String shuffleString(String string)
{
  List<String> letters = Arrays.asList(string.split(""));
  Collections.shuffle(letters);
  String shuffled = "";
  for (String letter : letters) {
    shuffled += letter;
  }
  return shuffled;
}

原文由 Nick Bolton 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题