在字符串中混洗字符的问题

时间:2015-01-18 13:12:58

标签: java nullpointerexception shuffle

我想为某个作业重新排序某个字符串。当我尝试这样做时会抛出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是来自随机生成的字符的字符串,不允许重复,在另一种方法中。

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

1 个答案:

答案 0 :(得分:1)

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

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

  

将指定的字符串连接到此字符串的末尾。