Generate Random String in java
本问题已经有最佳答案,请猛点这里访问。
我试图在Java中使用安全随机变量生成一个字符串。目前,我可以用特殊字符生成字母数字字符串,但我想要一个只有大写字母的字符串。
1 2 3 4 5 6 7 8 9 10 11 12 | public String createRandomCode(int codeLength, String id){ char[] chars = id.toCharArray(); StringBuilder sb = new StringBuilder(); Random random = new SecureRandom(); for (int i = 0; i < codeLength; i++) { char c = chars[random.nextInt(chars.length)]; sb.append(c); } String output = sb.toString(); System.out.println(output); return output ; } |
输入参数是输出字符串的长度&id,其中字母数字字符串。无法理解要对上述代码进行哪些修改以生成大写字母字符串。请帮助…
下面是我编写和使用的生成器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class RandomGenerator { private static final String characters ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static String generateRandom(int length) { Random random = new SecureRandom(); if (length <= 0) { throw new IllegalArgumentException("String length must be a positive integer"); } StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) { sb.append(characters.charAt(random.nextInt(characters.length()))); } return sb.toString(); } } |
在
您的方法从
1 |
如果要避免重复,则不能随意选择字符。您将要洗牌并挑选出第一个
1 2 3 4 5 6 7 8 9 10 | public String createRandomCode(int codeLength, String id) { List<Character> temp = id.chars() .mapToObj(i -> (char)i) .collect(Collectors.toList()); Collections.shuffle(temp, new SecureRandom()); return temp.stream() .map(Object::toString) .limit(codeLength) .collect(Collectors.joining()); } |
编辑2只是为了好玩,下面是实现原始随机代码生成器(允许重复)的另一种方法:
1 2 3 4 5 6 7 | public static String createRandomCode(int codeLength, String id) { return new SecureRandom() .ints(codeLength, 0, id.length()) .mapToObj(id::charAt) .map(Object::toString) .collect(Collectors.joining()); } |
下面是一个示例方法,它使用了字符a到z的int范围(同时该方法避免了
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 | public String createRandomCode(final int codeLength) { int min = 65;// A int max = 90;// Z StringBuilder sb = new StringBuilder(); Random random = new SecureRandom(); for (int i = 0; i < codeLength; i++) { Character c; do { c = (char) (random.nextInt((max - min) + 1) + min); } while (sb.indexOf(c.toString()) > -1); sb.append(c); } String output = sb.toString(); System.out.println(output); return output; } |
范围部分来自这个主题:在特定范围内生成随机整数