用Java创建一个具有随机字母和0到9的字符串

Creating a random string with A-Z and 0-9 in Java

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

如标题所示,我需要创建一个随机的、17个字符长的ID,比如"AJB53JHS232ERO0H1"。字母和数字的顺序也是随机的。我想用字母a-z和"check"变量创建一个数组,randoms到1-2。在一个循环中;

1
2
3
4
5
Randomize 'check' to 1-2.
If (check == 1) then the character is a letter.
Pick a random index from the letters array.
else
Pick a random number.

但我觉得有一种更简单的方法可以做到这一点。有?


这里可以使用我的方法生成随机字符串

1
2
3
4
5
6
7
8
9
10
11
12
protected String getSaltString() {
        String SALTCHARS ="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder salt=new StringBuilder();
        Random rnd = new Random();
        while (salt.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.charAt(index));
        }
        String saltStr = salt.toString();
        return saltStr;

    }

以上方法来自我的包,用于为登录生成一个salt字符串。


来自ApacheCommonsLang的RandomStringUtils可能有助于:

1
RandomStringUtils.randomAlphanumeric(17).toUpperCase()

2017年更新:RandomStringUtils已被否决,您现在应该使用randomstringGenerator。


实现功能的三个步骤:

步骤1您可以指定一个字符串,包括字符a-z和0-9。

喜欢。

1
 String candidateChars ="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

步骤2,如果您想从这个候选字符串生成一个随机字符。你可以使用

1
 candidateChars.charAt(random.nextInt(candidateChars.length()));

步骤3最后,指定要生成的随机字符串的长度(在您的描述中,它是17)。编写for循环并将步骤2中生成的随机字符附加到StringBuilder对象。

基于此,下面是一个示例公共类随机测试{

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
public static void main(String[] args) {

    System.out.println(generateRandomChars(
           "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 17));
}

/**
 *
 * @param candidateChars
 *            the candidate chars
 * @param length
 *            the number of random chars to be generated
 *
 * @return
 */

public static String generateRandomChars(String candidateChars, int length) {
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
        sb.append(candidateChars.charAt(random.nextInt(candidateChars
                .length())));
    }

    return sb.toString();
}

}

你可以用for循环很容易做到这一点,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
  String aToZ="ABCD.....1234"; // 36 letter.
  String randomStr=generateRandom(aToZ);

}

private static String generateRandom(String aToZ) {
    Random rand=new Random();
    StringBuilder res=new StringBuilder();
    for (int i = 0; i < 17; i++) {
       int randIndex=rand.nextInt(aToZ.length());
       res.append(aToZ.charAt(randIndex));            
    }
    return res.toString();
}