0

有谁知道在Java中生成指定长度和字符的随机字符串的好方法。

例如,“length”可以是 5,“possibleChars”可以是“a,b,c,1,2,3,!”。

所以

c!a1b 有效

cba16 不是。

我可以尝试从头开始写一些东西,但我觉得这一定是生成密码、生成优惠券代码等事情的常见用例......

有任何想法吗?

4

4 回答 4

2

执行此操作的代码非常短。有一个带有 N 个合法字符的 char[] 或字符串,并且,长度时间,选择一个介于 0 和 N-1 之间的随机数 R,使用 R 选择一个字符以附加到您生成的字符串。

于 2012-06-06T22:58:52.833 回答
2

你想要这样的东西吗?

Random r=new Random();

char[] possibleChars="abc123!".toCharArray();
int length=5;

char[] newPassword=new char[length];

for (int i=0; i<length;i++)
    newPassword[i]=possibleChars[r.nextInt(possibleChars.length)];

System.out.println(new String(newPassword));
于 2012-06-06T23:01:56.323 回答
1

我可以尝试从头开始写一些东西,但我觉得这一定是生成密码、生成优惠券代码等事情的常见用例......

不是很常见,而且每次的详细要求都不一样。此外,代码简单到微不足道。(模数下面的问题......这实际上是关于需求而不是解决方案。)

简而言之,编写自己的方法比寻找执行此操作的现有库方法要快。


当您使用涉及随机数的方案时,您需要注意可能会发生冲突;即该方法将不止一次生成相同的随机字符串。您可以通过使用更长的字符串来缓解这种情况,但这仅适用于某一点……取决于您的随机数生成器。(典型的随机数生成器实际上是伪随机数生成器,并产生最终循环的数字序列。即使使用完美的随机数生成器,在短序列上重复的概率也是有限的。)

事实上,这也是为什么“一刀切”解决您的问题不是一个好主意的另一个原因。

于 2012-06-06T23:04:10.037 回答
1

如果这是为了真正的安全性,而不是家庭作业或编程练习,那么请使用 SecureRandom,而不是 Random。

阅读Diceware网站,了解有关随机生成密码和其他内容的许多非常好的想法。

于 2012-06-07T15:44:00.997 回答