在Java中生成字母数字随机字符串[重复]

Posted

技术标签:

【中文标题】在Java中生成字母数字随机字符串[重复]【英文标题】:Generating Alphanumeric random string in Java [duplicate] 【发布时间】:2013-08-06 19:48:41 【问题描述】:

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

     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】:

以控制字符集和长度为例

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

并结合

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

指定字符集。

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

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

更多示例在这里使用:http://ideone.com/xvIZcd

【讨论】:

感谢您无视反对者。这非常有效! @PrivusGuru 顺便说一句,您发布的代码在(0..95) + 32 => 32..127 之间生成数字。例如,与这些数字对应的字符在这里是asciitable.com。以您的代码的方式执行此操作意味着将随机数限制为48..57 OR 65..90 OR 97..122,这将是相当痛苦的。 (或者您丢弃不在该范围内的字符,例如 @Sello 建议) @zapl 是否无碰撞? @Virtu 不,这是随机的。这包括连续 10 次生成相同的字符串,尽管概率非常小。【参考方案2】:

这是我使用的:

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("-", "");

【讨论】:

谢谢你。很有帮助。【参考方案3】:

你可以试试这个:

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

应该实现你的目标

【讨论】:

感谢您的时间和信息。我会在某个地方使用它。

以上是关于在Java中生成字母数字随机字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Access 中生成随机字母数字字符串后检查重复项

在django中生成唯一的字母数字标识符[重复]

如何在Java中生成随机字符串[重复]

如何在Java中生成随机字符串[重复]

生成固定长度的随机字符串[重复]

如何在java中生成一个随机的15位长[重复]