How to generate a random string of 20 characters
Possible Duplicate:
How to generate a random String in Java
我希望在不使用Apache类的情况下生成20个字符的随机字符串。我真的不在乎字母数字与否。另外,我稍后将把它转换成一个字节数组。
谢谢,
- 好啊。你已经试过什么了?
- 在一行中:uuid.randomuuid().toString().replace("-",").substring(‌&8203;0,20)
- 我想这3个单行代码非常有用。Long.toHexString(Double.doubleToLongBits(Math.random()));UUID.randomUUID().toString();RandomStringUtils.randomAlphanumeric(20);号
干得好。只需在第一行指定要允许的字符。
1 2 3 4 5 6 7 8 9
| char[] chars ="abcdefghijklmnopqrstuvwxyz". toCharArray();
StringBuilder sb = new StringBuilder (20);
Random random = new Random();
for (int i = 0; i < 20; i ++) {
char c = chars [random. nextInt(chars. length)];
sb. append(c );
}
String output = sb. toString();
System. out. println(output ); |
- 这不是一个好方法……我尝试了随机获得上百个号码,但很少是唯一的。我将此代码放入while循环中,并迭代0到99。多次输出。
- @尼基尔,我怀疑你做错了什么。如果您需要更好的随机数来源,请尝试使用SecureRandom。不过,在这种情况下,重复并不重要,通过循环以上代码,我得到了这100个唯一的字符串:pastebin.com/elz950tk
- @Whitefang34嗨,我在一个中间层尝试过这个代码。我认为这可能在桌面Java应用程序上工作得很好。你可以在这里查看我的结果:pastebin.com/ydct41g8。所以当你在一个中间集中使用它时,你会得到重复的字符串。我所做的唯一更改是使用StringBuffer而不是StringBuilder。
- "WeleFangang34"……只是在一个普通的Java类中检查了……是的,我得到了100个唯一的字符串……所以在MIDLET中这可能不太好,因为随机类是没有那么强大的…或者类似的东西…
- @尼基尔啊,真有趣。也许Random结构得到的是相同的种子(似乎它使用的是系统时间,而且是四舍五入的)。尝试通过将Random对象放在循环之外来重用它。您应该得到所需的结果,因为它将继续从同一初始种子生成不同的数字(使用SecureRandom来防止它最终重复)。
- @白方34是的……平滑。我把随机对象放到循环的一边,结果是完美的。我得到的是100个随机数。:)而《白方》是一本伟大的书;)……我推荐《野性的召唤》……以防你没读过。
- 另一个答案是:stackoverflow.com/questions/41107/&hellip;
我会用这种方法:
1 2 3 4 5 6 7 8 9
| String randomString (final int length ) {
Random r = new Random(); // perhaps make it a class variable so you don't make a new one every time
StringBuilder sb = new StringBuilder ();
for(int i = 0; i < length ; i ++) {
char c = (char)(r. nextInt((int)(Character. MAX_VALUE)));
sb. append(c );
}
return sb. toString();
} |
如果需要字节[],可以这样做:
1 2 3 4 5 6 7 8
| byte[] randomByteString (final int length ) {
Random r = new Random();
byte[] result = new byte[length ];
for(int i = 0; i < length ; i ++) {
result [i ] = r. nextByte();
}
return result ;
} |
或者你可以这样做
1 2 3 4 5 6 7 8 9
| byte[] randomByteString (final int length ) {
Random r = new Random();
StringBuilder sb = new StringBuilder ();
for(int i = 0; i < length ; i ++) {
char c = (char)(r. nextInt((int)(Character. MAX_VALUE)));
sb. append(c );
}
return sb. toString(). getBytes();
} |
可以将类java.util.random与方法一起使用
1
| char c = (char)(rnd.nextInt(128-32))+32 |
20倍以获取字节,您将其解释为ASCII。如果你对ASCII没问题的话。
32是偏移量,通常从可打印字符的位置开始。
1 2 3 4 5 6 7 8
| public String randomString (String chars, int length ) {
Random rand = new Random();
StringBuilder buf = new StringBuilder ();
for (int i =0; i <length ; i ++) {
buf. append(chars. charAt(rand. nextInt(chars. length())));
}
return buf. toString();
} |