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