在Java中使用AZ和0-9创建随机字符串

cbt*_*cbt 54 java random

正如标题所示,我需要创建一个随机的,长度为17个字符的ID.像" AJB53JHS232ERO0H1" 这样的东西.字母和数字的顺序也是随机的.我想创建一个带有字母AZ和'check'变量的数组1-2.在循环中;

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.
Run Code Online (Sandbox Code Playgroud)

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

Sur*_*tta 99

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

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;

    }
Run Code Online (Sandbox Code Playgroud)

上面的方法从我的包里用来生成一个用于登录的盐字符串.

  • 或者只是创建一个`char []`,因为你确切知道它会有多长.无需附加任何东西.我还使用`Random.nextInt`而不是调用`nextFloat`并将其乘以长度. (7认同)
  • 请注意,数字的平均数量与字母的数量不同。 (2认同)

小智 75

RandomStringUtils 来自Apache commons-lang可能有所帮助:

RandomStringUtils.randomAlphanumeric(17).toUpperCase()
Run Code Online (Sandbox Code Playgroud)

2017更新:RandomStringUtils已被弃用,您现在应该使用RandomStringGenerator.

  • 考虑更新答案,因为Apache用commons-text中的`RandomStringGenerator`替换它. (2认同)
  • 您还可以使用 `RandomStringUtils.random(length, useLetters, useNumbers)`,其中长度为 **int**,而 useLetters 和 useNumbers 为 **boolean** 值。 (2认同)
  • @NeriaNachum 你在哪里看到 `RandomStringUtils` 已被替换/弃用?我只是看到“RandomStringUtils 适用于简单的用例。对于更高级的用例,请考虑使用 Apache Commons Text 的 RandomStringGenerator。” [此处](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RandomStringUtils.html) (2认同)

Mou*_*ava 11

实现您的功能的三个步骤:

步骤#1您可以指定一个字符串,包括字符AZ和0-9.

喜欢.

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Run Code Online (Sandbox Code Playgroud)

步骤#2然后,如果您想从此候选字符串生成随机字符.您可以使用

 candidateChars.charAt(random.nextInt(candidateChars.length()));
Run Code Online (Sandbox Code Playgroud)

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

基于此,这是一个示例公共类RandomTest {

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

}
Run Code Online (Sandbox Code Playgroud)


Mas*_*dul 5

您可以使用for循环轻松地做到这一点,

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();
}
Run Code Online (Sandbox Code Playgroud)