在Java中随机化一个字符串

时间:2015-12-18 06:51:19

标签: java string random

我需要使用已经定义的2-4个字母组创建一个完全随机化的字符串。如何使用字母,将它们组合成一个字符串,随机化每个字符的位置,然后将该大字符串转换为两个随机大小(但> = 2)的其他字符串。感谢大家的帮助。

到目前为止我的代码是:

    //shuffles letters
    ArrayList arrayList = new ArrayList();
    arrayList.add(fromFirst);
    arrayList.add(fromLast);
    arrayList.add(fromCity);
    arrayList.add(fromSong);

    Collections.shuffle(arrayList);

但是我发现这会使字符串洗牌而不是单个字母。作为一个数组,它也有常规书写中找不到的括号,我希望它看起来像随机的各种各样的字母

2 个答案:

答案 0 :(得分:2)

这是一种非常强力的方法,但它有效。它会将索引位置混洗并将它们映射到原始位置。

    final String possibleValues = "abcd";
    final List<Integer> indices = new LinkedList<>();
    for (int i = 0; i < possibleValues.length(); i++) {
        indices.add(i);
    }
    Collections.shuffle(indices);

    final char[] baseChars = possibleValues.toCharArray();
    final char[] randomChars = new char[baseChars.length];
    for (int i = 0; i < indices.size(); i++) {
        randomChars[indices.get(i)] = baseChars[i];
    }
    final String randomizedString = new String(randomChars);
    System.out.println(randomizedString);

    final Random random = new Random();
    final int firstStrLength = random.nextInt(randomChars.length);
    final int secondStrLength = randomChars.length - firstStrLength;
    final String s1 = randomizedString.substring(0, firstStrLength);
    final String s2 = randomizedString.substring(firstStrLength);

    System.out.println(s1);
    System.out.println(s2);

答案 1 :(得分:0)

您可以构建一个字符串,然后从该字符串中随机播放字符。使用Math.rand()可以生成字符长度范围内的随机数。为每个角色生成它将获得洗牌的字符串。由于你的代码不清楚,我只想写一个例子

public class ShuffleInput {

public static void main(String[] args) {
    ShuffleInput si = new ShuffleInput();
    si.shuffle("input");

}
public void shuffle(String input){
    List<Character> chars = new ArrayList<Character>();

    for(char c:input.toCharArray()){
        chars.add(c);
    }

    StringBuilder output = new StringBuilder(input.length());

    while(chars.size()!=0){
        int rand = (Integer)(Math.random()*characters.size());
        output.append(characters.remove(rand));
    }
    System.out.println(output.toString());
}

}