Creating a random string with A-Z and 0-9 in Java
本问题已经有最佳答案,请猛点这里访问。
如标题所示,我需要创建一个随机的、17个字符长的ID,比如"
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的
1 | RandomStringUtils.randomAlphanumeric(17).toUpperCase() |
2017年更新:
实现功能的三个步骤:
步骤1您可以指定一个字符串,包括字符a-z和0-9。
喜欢。
1 |
步骤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(); } |