是否有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 > 0
被slice
编辑
正如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”等字符。