Java中字母数字随机串的生成

Generating Alphanumeric random string in Java

本问题已经有最佳答案,请猛点这里访问。

我正在使用另一个答案中的字符串生成器,但是除了字母/数字、没有空格、标点符号等,我不能使用任何东西。您能解释一下如何限制此代码中的字符集吗?另外,如何确保它总是30个字符长?

1
2
3
4
5
6
7
     Random generator = new Random();
    StringBuilder stringBuilder = new StringBuilder();
    int Length = 30;
    char tempChar ;
    for (int i = 0; i < Length; i++){
        tempChar = (char) (generator.nextInt(96) + 32);
        stringBuilder.append(tempChar);

我已经研究了大多数其他答案,但无法找到解决这个问题的方法。谢谢。如果这是复制品,不要冲我大喊大叫。大多数答案都无法解释代码的哪一部分控制生成的数字的长度或在哪里调整字符集。

我还尝试了StringBuilder.replace("","1"),这可能有效,但Eclipse说没有用于StringBuilder的replace方法。


如果要控制字符集和长度,请以

1
2
3
4
5
6
7
8
9
10
public static String randomString(char[] characterSet, int length) {
    Random random = new SecureRandom();
    char[] result = new char[length];
    for (int i = 0; i < result.length; i++) {
        // picks a random index out of character set > random character
        int randomCharIndex = random.nextInt(characterSet.length);
        result[i] = characterSet[randomCharIndex];
    }
    return new String(result);
}

并与

1
char[] CHARSET_AZ_09 ="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();

指定字符集。

它不是基于StringBuilder,因为您知道长度,不需要所有开销。

它分配正确大小的char[]数组,然后用从输入数组中随机选择的字符填充该数组中的每个单元格。

此处使用的更多示例:http://ideone.com/xvizcd


我用的是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String randomStringOfLength(int length) {
    StringBuffer buffer = new StringBuffer();
    while (buffer.length() < length) {
        buffer.append(uuidString());
    }

    //this part controls the length of the returned string
    return buffer.substring(0, length);  
}


private static String uuidString() {
    return UUID.randomUUID().toString().replaceAll("-","");
}


您可以尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
    //piece
    int i = 0;
    while(i < length){
      char temp =(char) (generator.nextInt(92)+32);
      if(Character.isLetterOrDigit(temp))
      {
        stringBuilder.append(temp);
        ++i;
      }
    }
    System.out.println(stringBuilder);

应该实现你的目标