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

Generate a random Alphanumeric String without some characters

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

中排除一些字符

l, i, o and the number 0

目前我有这个代码:

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

使用要构建字符串的元素构建一个数组。

假设 C={a,b,c,d....,1,2,3..} 的大小为 n

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

您可以轻松地使 C 不包含您不希望出现在随机 String.

中的字符集

既然您正在使用 RandomStringUtils,您也可以为此使用指定的 RandomStringUtils#random 方法。

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

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

查看文档 here

在不使用任何第 3 方库的情况下将 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 基于流的方法:

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());
}

这两种方法通过从静态 ALPHABET.

中选取 length 个随机字符来生成 String 个给定的 length