java replace duplicate characters

我怕爱的太早我们不能终老 提交于 2019-12-11 04:48:15

问题


So for an assignment I have to generate a random code, and have someone guess the code in the console. Now My problem is that I can't seem to find a way to replace any duplicate characters in the code. The code must range in "ABCDEF", and contain 4 letters. This is what I got so far:

    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);

it prints either a code consisting out of 2-3 letters, or a code containing 5 or 6 letters, and rarely a correct code with 4 letters. What this code does as far as I know is not add the duplicate characters, but I want it to Replace them instead with another character. Is there someway to replace the characters with another randomly generated char, which is not in the String yet, without using Sets?


回答1:


It sounds like you only want to use each letter in code once? Why don't you set that up from the beginning using an ArrayList, and removing each character if it is randomly selected:

// 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);
}



回答2:


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);
    }
}

Replace your for loop with this one and then you don't need to do any replacing afterwards. This will only insert characters that are not already in the string.



来源:https://stackoverflow.com/questions/27986896/java-replace-duplicate-characters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!