是否有function在Java中生成随机字符?

Java是否有任何function来生成随机字符或string? 或者必须简单地select一个随机整数并将该整数的ascii代码转换为一个字符?

有很多方法可以做到这一点,但是,它涉及到生成一个随机的int (使用例如java.util.Random.nextInt ),然后使用它来映射到一个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 

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

要在az中生成一个随机字符:

 Random r = new Random(); char c = (char)(r.nextInt(26) + 'a'); 

你也可以使用Apache Commons项目中的RandomStringUtils:

 RandomStringUtils.randomAlphabetic(stringLength); 
 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); } 

在范围az,AZ中生成值。

在下面的小“a”97 ascii值。

 public static char randomSeriesForThreeCharacter() { Random r = new Random(); char random_3_Char = (char) (97 + r.nextInt(3)); return random_3_Char; } 

在a,b,c或d的上面3个数字,如果你想要所有字符像a到z那么你把3的数字replace成25。

使用美元 :

 Iterable<Character> chars = $('a', 'z'); // 'a', 'b', c, d .. z 

chars你可以build立一个“洗牌”的字符范围:

 Iterable<Character> shuffledChars = $('a', 'z').shuffle(); 

然后取前n字符,得到一个长度为n的随机string。 最终的代码很简单:

 public String randomString(int n) { return $('a', 'z').shuffle().slice(n).toString(); } 

NB :条件n > 0slice

编辑

正如Steve正确指出的那样, randomString每个字母randomString使用一次。 作为解决方法,您可以在调用shuffle之前重复m次字母:

 public String randomStringWithRepetitions(int n) { return $('a', 'z').repeat(10).shuffle().slice(n).toString(); } 

或只是提供您的字母表为String

 public String randomStringFromAlphabet(String alphabet, int n) { return $(alphabet).shuffle().slice(n).toString(); } String s = randomStringFromAlphabet("00001111", 4); 

stringabc =“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;

char letter = abc.charAt(rd.nextInt(abc.length()));

这个也适用

你知道了 只需要自己生成随机的ASCII码。 你需要什么?

您可以使用基于Quickcheck规范的testing框架中的生成器。

使用anyString方法创build一个随机string。

 String x = anyString(); 

您可以从更受限制的字符集或最小/最大大小限制创buildstring。

通常你会运行多个值的testing:

 @Test public void myTest() { for (List<Integer> any : someLists(integers())) { //A test executed with integer lists } } 

看看Java的Randomizer类。 我想你可以使用随机数(char []数组)来随机化一个字符。

polygenelubricants的答案也是一个很好的解决scheme,如果你只想生成hex值:

 /** A list of all valid hexadecimal characters. */ private static char[] HEX_VALUES = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F' }; /** Random number generator to be used to create random chars. */ private static Random RANDOM = new SecureRandom(); /** * Creates a number of random hexadecimal characters. * * @param nValues the amount of characters to generate * * @return an array containing <code>nValues</code> hex chars */ public static char[] createRandomHexValues(int nValues) { char[] ret = new char[nValues]; for (int i = 0; i < nValues; i++) { ret[i] = HEX_VALUES[RANDOM.nextInt(HEX_VALUES.length))]; } return ret; } 

如果你不介意在你的代码中添加一个新库,你可以用MockNeat生成angular色(免责声明:我是作者之一)。

 MockNeat mock = MockNeat.threadLocal(); Character chr = mock.chars().val(); Character lowerLetter = mock.chars().lowerLetters().val(); Character upperLetter = mock.chars().upperLetters().val(); Character digit = mock.chars().digits().val(); Character hex = mock.chars().hex().val(); 
  Random randomGenerator = new Random(); int i = randomGenerator.nextInt(256); System.out.println((char)i); 

应该照顾你想要的东西,假设你认为“0”,“1”,“2”等字符。