关于Java:如何生成20个字符的随机字符串

How to generate a random string of 20 characters

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to generate a random String in Java

我希望在不使用Apache类的情况下生成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);


我会用这种方法:

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();
}