我想生成一个随机的字母数字字符串。我想从我的字符串
中排除一些字符l,i,o和数字0
目前我有这段代码:
import org.apache.commons.lang.RandomStringUtils;
...
numberFile = RandomStringUtils.randomAlphanumeric( 5 );
答案 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}}。