java 替换重复字符

java replace duplicate characters

因此,对于一项作业,我必须生成一个随机代码,并让某人在控制台中猜测该代码。现在我的问题是我似乎无法找到一种方法来替换代码中的任何重复字符。该代码必须在 "ABCDEF" 范围内,并且包含 4 个字母。这是我到目前为止得到的:

    char codeLetters;
    String masterCode;
    StringBuilder strings = new StringBuilder(); 
    Random random = new Random();

    for (int i = 0; i < 4; i++) {
        codeLetters = code[random.nextInt(code.length)];
        strings.append(codeLetters);
    }
    masterCode = strings.toString();
    String temp = "";
    boolean isDuplicate = false;

    for (int i = 0; i < masterCode.length(); i++) {
        isDuplicate = false;
        char comparisonChar = masterCode.charAt(i);
        for (int j = i + 1; j < masterCode.length(); j++) {
            char nextChar = masterCode.charAt(j);
            if (comparisonChar == nextChar) isDuplicate = true;
        }
        if (!isDuplicate) temp = temp + comparisonChar;
    }
    masterCode = temp;

    System.out.println(masterCode);

它打印由 2-3 个字母组成的代码,或包含 5 或 6 个字母的代码,很少有 4 个字母的正确代码。据我所知,这段代码的作用不是添加重复字符,而是我希望它用另一个字符替换它们。有没有办法在不使用集合的情况下用另一个随机生成的字符替换字符,该字符还不在字符串中?

听起来您只想使用 code 中的每个字母一次?为什么不使用 ArrayList 从一开始就设置它,如果每个字符是随机选择的,则将其删除:

// copy `code` into a temporary arraylist
ArrayList<Character> possibleLetters = new ArrayList<Character>(code.length);
for (char c : code) possibleLetters.add(c);
// select randomly "without replacement"
for (int i = 0; i < 4; i++) {
    int index = random.nextInt(possibleLetters.size());
    codeLetters = possibleLetters.remove(index);
    strings.append(codeLetters);
}
import java.util.Random;

public class Main {

    private static char[] code = new char[] { 'A', 'B', 'C', 'D', 'E', 'F'};

    public static final void main(String[] args) {
        char codeLetters;
        String masterCode;
        StringBuilder strings = new StringBuilder(); 
        Random random = new Random();

        while (strings.length() < 4) {
            char tmpcode = code[random.nextInt(code.length)];
            if (strings.toString().contains(tmpcode + "")) {
                continue;
            }
            codeLetters = tmpcode;
            strings.append(codeLetters);
        }
        masterCode = strings.toString();
        System.out.println(masterCode);
    }
}

用这个替换你的 for 循环,然后你不需要做任何替换。 这只会插入字符串中不存在的字符。