如何在Java中生成指定长度的随机字母数字字符串?

4
什么是最简单的方式?尽量减少任何导入。
这个很好:
String str = Long.toHexString(Double.doubleToLongBits(Math.random()));

但它并不完美,例如它会与自定义长度复杂化。

还有一个选项:如何使此字符串唯一?


3
为什么不使用字符串处理函数?只需在循环中生成所需范围内的随机字符,并将其追加到正在构建的字符串中。另外,为什么要最小化导入? - nanofarad
减少导入的数量并不会获得任何奖励。它不会影响程序运行的时间,甚至不会影响编译的时间。 - Daniel M.
@hexafraction,是的,你说得对,你的方法很合理。 DanielM. 谢谢,我会注意的。 但问题可能是一个应用难题。 - San
2个回答

6
创建一个字符串,其中包含可以包含在该字符串中的字符:
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

使用Random类生成一个整数,然后使用该整数从字符串中获取一个随机字符。
Random random = new Random();
alphabet.charAt(random.nextInt(alphabet.length()));

按照你自定义的长度n,重复执行此操作,并将字符添加到字符串中。
StringBuilder builder = new StringBuilder(n);
for (int i = 0; i < n; i++) {
    builder.append(/* The generated character */);
}

在一起看起来可能像这样:

private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

public String generateString(int length) {
    Random random = new Random();
    StringBuilder builder = new StringBuilder(length);

    for (int i = 0; i < length; i++) {
        builder.append(ALPHABET.charAt(random.nextInt(ALPHABET.length())));
    }

    return builder.toString();
}

3

commons-lang中的RandomStringUtils。如果您不想导入,请查看其源代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接