生成一个没有某些字符的随机字母数字字符串
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
我想生成一个随机的字母数字字符串。我想从我的字符串
中排除一些字符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