如何在Java中生成随机字符串?

How can I generate random strings in java?

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

Possible Duplicate:
How to generate a random alpha-numeric string in Java

我想写一个按指定长度构建随机字符串的代码。怎么办呢?


下面是生成两种类型字符串的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.security.SecureRandom;
import java.math.BigInteger;

public final class SessionIdentifierGenerator
{

  private SecureRandom random = new SecureRandom();

  public String nextSessionId()
  {
    return new BigInteger(130, random).toString(32);
  }

}

输出:ponhbh78cqjahls5flbdf4dlu4

参考这里

1
2
String uuid = UUID.randomUUID().toString();
System.out.println("uuid =" + uuid);

输出:281211F4-C1D7-457A-9758-555041A5FF97

参考这里


好吧,首先编写一个函数,它将为您提供一个满足您需求的随机字符,然后根据所需的长度将其包装在一个for循环中。

下面的程序给出了一种实现这一点的方法,即使用一个常量字符池和一个随机数生成器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Random;

public class testprog {
    private static final char[] pool = {
        'a','b','c','d','e','f','g',
        'h','i','j','k','l','m','n',
        'o','p','q','r','s','t','u',
        'v','w','x','y','z'};

    private Random rnd;

    public testprog () { rnd = new Random(); }

    public char getChar() { return pool[rnd.nextInt(pool.length)]; }

    public String getStr(int sz) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < sz; i++)
            sb.append(getChar());
        return new String(sb);
    }

    public static void main(String[] args) {
        testprog tp = new testprog ();
        for (int i = 0; i < 10; i++)
            System.out.println (tp.getStr(i+5));
    }
}

在一次特别的跑步中,我得到了:

1
2
3
4
5
6
7
8
9
10
hgtbf
xismun
cfdnazi
cmpczbal
vhhxwjzbx
gfjxgihqhh
yjgiwnftcnv
ognwcvjucdnm
hxiyqjyfkqenq
jwmncfsrynuwed

现在,如果您想从不同的字符集调整字符池,甚至可以通过更改它们在数组中出现的频率(例如,e字符多于z)来调整对特定字符的倾斜。

但对于你想做的事情来说,这应该是一个好的开始。