有谁知道在Java中生成指定长度和字符的随机字符串的好方法。
例如,“length”可以是 5,“possibleChars”可以是“a,b,c,1,2,3,!”。
所以
c!a1b 有效
但
cba16 不是。
我可以尝试从头开始写一些东西,但我觉得这一定是生成密码、生成优惠券代码等事情的常见用例......
有任何想法吗?
有谁知道在Java中生成指定长度和字符的随机字符串的好方法。
例如,“length”可以是 5,“possibleChars”可以是“a,b,c,1,2,3,!”。
所以
c!a1b 有效
但
cba16 不是。
我可以尝试从头开始写一些东西,但我觉得这一定是生成密码、生成优惠券代码等事情的常见用例......
有任何想法吗?
执行此操作的代码非常短。有一个带有 N 个合法字符的 char[] 或字符串,并且,长度时间,选择一个介于 0 和 N-1 之间的随机数 R,使用 R 选择一个字符以附加到您生成的字符串。
你想要这样的东西吗?
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));
我可以尝试从头开始写一些东西,但我觉得这一定是生成密码、生成优惠券代码等事情的常见用例......
不是很常见,而且每次的详细要求都不一样。此外,代码简单到微不足道。(模数下面的问题......这实际上是关于需求而不是解决方案。)
简而言之,编写自己的方法比寻找执行此操作的现有库方法要快。
当您使用涉及随机数的方案时,您需要注意可能会发生冲突;即该方法将不止一次生成相同的随机字符串。您可以通过使用更长的字符串来缓解这种情况,但这仅适用于某一点……取决于您的随机数生成器。(典型的随机数生成器实际上是伪随机数生成器,并产生最终循环的数字序列。即使使用完美的随机数生成器,在短序列上重复的概率也是有限的。)
事实上,这也是为什么“一刀切”解决您的问题不是一个好主意的另一个原因。
如果这是为了真正的安全性,而不是家庭作业或编程练习,那么请使用 SecureRandom,而不是 Random。
阅读Diceware网站,了解有关随机生成密码和其他内容的许多非常好的想法。