是否有在Java中生成随机字符的功能?

Chr*_*ris 56 java random

Java是否具有生成随机字符或字符串的任何功能?或者只需选择一个随机整数并将该整数的ascii代码转换为字符?

dog*_*ane 118

要在az中生成随机字符:

Random r = new Random();
char c = (char)(r.nextInt(26) + 'a');
Run Code Online (Sandbox Code Playgroud)

  • 如果您不确定字母表中有多少个字母,您甚至可以更进一步和`(char)(r.nextInt('z' - 'a')+'a')`` (7认同)
  • @AmirEldor 永远不会产生 az,因为 `'z' - 'a' == 25`,而不是 26。 (4认同)

pol*_*nts 82

有很多方法可以做到这一点,但是,它涉及生成随机int(使用eg java.util.Random.nextInt)然后使用它来映射到a char.如果你有一个特定的字母表,那么这样的东西很漂亮:

    import java.util.Random;

    //...

    Random r = new Random();

    String alphabet = "123xyz";
    for (int i = 0; i < 50; i++) {
        System.out.println(alphabet.charAt(r.nextInt(alphabet.length())));
    } // prints 50 random characters from alphabet
Run Code Online (Sandbox Code Playgroud)

请注意,这java.util.Random实际上是基于相当弱的线性同余公式随机数生成器.你提到了密码学的必要性; 在这种情况下,您可能想要研究使用更强大的加密安全伪随机数生成器(例如).java.security.SecureRandom


Jos*_*ema 70

您还可以使用Apache Commons项目中的RandomStringUtils:

RandomStringUtils.randomAlphabetic(stringLength);
Run Code Online (Sandbox Code Playgroud)


Pet*_*ser 11

private static char rndChar () {
    int rnd = (int) (Math.random() * 52); // or use Random or whatever
    char base = (rnd < 26) ? 'A' : 'a';
    return (char) (base + rnd % 26);

}
Run Code Online (Sandbox Code Playgroud)

生成范围az,AZ中的值.

  • `(char) (base + rnd % 26)` 究竟是如何工作的?是因为将 char 添加到 int 会将 char 转换为其 ASCII 数字吗? (2认同)
  • @Lèsemajesté - 是的,这就是原因.每个`char`也可以隐式转换为int,因此'a'可以被视为整数值(97),然后偏移3表示将产生100,当转换回`char`是'd'时. (2认同)

小智 9

String abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char letter = abc.charAt(rd.nextInt(abc.length()));
Run Code Online (Sandbox Code Playgroud)

这个也有效。