生成一个没有字符的随机字母数字字符串

时间:2017-07-24 15:20:17

标签: java random alphanumeric

我想生成一个随机的字母数字字符串。我想从我的字符串

中排除一些字符
  

l,i,o和数字0

目前我有这段代码:

import org.apache.commons.lang.RandomStringUtils;
...
numberFile = RandomStringUtils.randomAlphanumeric( 5 );

3 个答案:

答案 0 :(得分:5)

由于您使用的是RandomStringUtils,因此您也可以使用指定的RandomStringUtils#random方法。

public static String random(int count,
                            int start,
                            int end,
                            boolean letters,
                            boolean numbers,
                            char... chars)

参数:
count - 要创建的随机字符串的长度
开始 - 以字符集开头的位置 结束 - 在之前结束的字符集中的位置 字母 - 只允许字母?
数字 - 只允许数字?
chars - 从中​​选择randoms的字符集。如果为null,则它将使用所有字符集。

请参阅文档here

答案 1 :(得分:4)

构造一个数组,其中包含要在其上构建字符串的元素。

我们说C = {a,b,c,d....,1,2,3..}的大小为n

生成n范围内的[0,n-1]个随机数,例如D={3,5,1,0,2..}。 现在,如果你从s构建一个字符串D,如下所示:s[i] = C[D[i]]你得到的是C中定义的一组字符中的随机字符串,猜测正是如此你想要什么。

您可以轻松地C使其不包含您不想在随机String中显示的字符集。

答案 2 :(得分:1)

将Davide Spataro的答案转换为不使用任何第三方库的代码可能如下所示:

private static final String ALPHABET = "123456789abcdefghjkmnpqrstuvwxyz";

public static String generateRandomString(int length) {
    Random random = ThreadLocalRandom.current();
    int alphabetLength = ALPHABET.length();
    char[] chars = new char[length];
    for (int i = 0; i < length; i++)
        chars[i] = ALPHABET.charAt(random.nextInt(alphabetLength));
    return String.valueOf(chars);
}

或者基于Java 8 Stream的方法:

public static String generateRandomStringJava8(int length) {
    return IntStream.range(0, length)
            .map(i -> ThreadLocalRandom.current().nextInt(ALPHABET.length()))
            .mapToObj(i -> ALPHABET.substring(i, i + 1))
            .collect(Collectors.joining());
}

这两种方法都会通过从静态String中挑选length个随机字符来生成给定length的{​​{1}}。