如何仅使用Java使用特殊字符(包括空格)创建大小为5的非重复随机字符串?

avi*_*der 1 java special-characters

我正在尝试仅使用特殊字符来创建大小为5的字符串-

〜`!@#$%^&*()-_ = + [{]} \ |;:\'\“,<。> /?

其中也包括空间

下面是我尝试过的代码行:

public static String randomSpecialCharacterString() {
    char[] possibleCharacters = (new String("~`!@ # $ %^&*()-_=+[{]}\\|;:\'\",<.>/?")).toCharArray();
    String randomStr = RandomStringUtils.random( 5, 0, possibleCharacters.length-1, false, false, possibleCharacters, new SecureRandom());
    return randomStr;
}
Run Code Online (Sandbox Code Playgroud)

但是,它不会返回非重复的String。而且,应该返回带空格的String。

例如- @# ?/!)( +

我已经浏览了所有可能的重复项。

Max*_*mer 5

假设RESULT_STR_LENGTH是5:

  1. 如果您不想重复,只需将以下顺序随机化即可possibleCharacters

    char[] shuffledCharacters = new char[possibleCharacters.length];
    Collections.shuffle(Arrays.asList(possibleCharacters)).toArray(shuffledCharacters);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果结果中必须有空格,则将一个随机字符替换为空格(如果您不想重复空格,请确保possibleCharacters不包含任何空格):

    shuffledCharacters[new Random().nextInt(RESULT_STR_LENGTH)] = ' ';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后以字符串形式返回前RESULT_STR_LENGTH个字符:

    return new String(shuffledCharacters, 0, RESULT_STR_LENGTH);
    
    Run Code Online (Sandbox Code Playgroud)