在字符串中打乱字符的问题

Problems with shuffling characters in a string

我想为一个作业打乱某个字符串。当我尝试这样做时,它会抛出 NullPointerException.

for (char d : masterCode.toCharArray()) {
    possibleLetters.add(d);
}
Collections.shuffle(possibleLetters);
for (char c : possibleLetters) { // arraylist of characters
    sb.append(c); //stringbuilder
    masterCode = sb.toString();
}

所以我尝试了另一种方式:

masterCode = masterCode.substring(0, 4);
for (char d : masterCode.toCharArray()) {
    possibleLetters.add(d);
}
Collections.shuffle(possibleLetters);
for (char c : possibleLetters) { // arraylist of characters
    //sb.append(c); //stringbuilder
    masterCode = masterCode.concat(Character.toString(c)); // string
}

但这也没有给出预期的结果。 masterCode 首先是 ECAB,然后是下一个输出 CCBA.

masterCode是随机生成的字符串,不允许重复,另一种方法。

问题:解决此问题的好方法是什么?

在示例一中,您确定 sb 是使用 StringBuilder sb = new StringBuilder(); 初始化的吗?检查堆栈跟踪是否有错误,它可能显示 sb 为空。

在示例二中,masterCode = masterCode.concat(Character.toString(c)); 行附加了您的字符。您需要先设置 masterCode = ""。根据 the docs,此方法:

Concatenates the specified string to the end of this string.