学校作息时间表java随机⽣成字符串RandomStringUtils
使⽤RandomStringUtils,可以选择⽣成随机字符串,可以是全字母、全数字或⾃定义⽣成字符等等...
其最基础的⽅法如下:
public static String random(int count, int start, int end, boolean letters,
boolean numbers, char[] chars, Random random) {}
参数解读:
count:需要⽣成的随机串位数
letters:只要字母?
numbers:只要数字?
chars:⾃定义⽣成字符数组,如果为null,则为所有字符
start、end:选择字符开始⽣成的位置-----如果chars为null,start就是ASCII你想开始⽣成字符的位置,end同理;chars不为空的话,就是你⾃定义字符数组开始⽣成字符的位置
工地例会random:随机源
API:
序
难忘的春节作文300字号
⽅法说明
1random(int count)在所有字符中随机⽣成6位
2randomAscii(int count)在ASCII表中的打印字符中,即ASCII表32-127中随机⽣成6位
3randomAlphabetic(int count)⽣成只有字母的随机字符串,但是此⽅法效率不⾼,不建议这样使⽤
4randomAlphanumeric(int count)⽣成只有字母和数字的随机字符串,同样不建议这样使⽤
5randomNumeric(int count)⽣成只有数字的随机字符串,同样不建议这样使⽤
6random(int count, boolean letters, boolean numbers)可以指定是否要限定只⽣成字母或数字,上述三个⽅法都是调⽤此⽅法
7random(int count, int start, int end, boolean letters, boolean
numbers)
可以指定字符集开始的位置,即不⽤搜索所有全部字符,同时可指定是否
指定是否只⽣成字母或数字
8random(int count, int start, int end, boolean letters, boolean
numbers, char[] chars)⽤指定的字符集⽣成字符串
9random(int count, String chars)使⽤指定字符串的字符⽣成新的随机字符串
10String random(int count, char[] chars)⽤指定的字符集⽣成字符串,只是不能指定letters和numbers,其实还是
调⽤了8
<
按照源码顺序使⽤,其源码其实都是在调⽤基础⽅法
@Test
public void RandomStringUtilsTest(){
System.out.println("RandomStringUtils.random1-->" + RandomStringUtils.random(6));
System.out.println("RandomStringUtils.randomAscii-->" + RandomStringUtils.randomAscii(6));
System.out.println("RandomStringUtils.randomAlphabetic-->" + RandomStringUtils.randomAlphabetic(6));
System.out.println("RandomStringUtils.randomAlphanumeric-->" + RandomStringUtils.randomAlphanumeric(6));
System.out.println("RandomStringUtils.randomNumeric-->" + RandomStringUtils.randomNumeric(6));
System.out.println("RandomStringUtils.random2-->" + RandomStringUtils.random(6,fal, fal));
//第⼀种即是直接写字符对应的⼗进制
牛肉白菜饺子
System.out.println("RandomStringUtils.random3.1-->" + RandomStringUtils.random(6,48,122,fal, fal));
//第⼆种是直接写字符,但要确保字符顺序不能写反
//这⾥我将letters和numbers都设置成true,所以⽣成的随机字符串只包括字母和数字,这种⽅法可以使⽤了,应为在'0'-'z'之间,其他字符已经不多了
System.out.println("RandomStringUtils.random3.2-->" + RandomStringUtils.random(6,'0','z',true, true));
char[] chars = new char[]{'1', '2', '3', 'a', 'b', 'c' };
System.out.println("RandomStringUtils.random4-->" + RandomStringUtils.random(6,0,chars.length,fal, fal, chars));
String str = "123abc";
System.out.println("RandomStringUtils.random5-->" + RandomStringUtils.random(6, str));
System.out.println("RandomStringUtils.random6-->" + RandomStringUtils.random(6, chars));
}
out:
RandomStringUtils.random1--> 仓 饛皾㙨
RandomStringUtils.randomAscii-->ry){(Z
RandomStringUtils.randomAlphabetic-->zTuXYz
RandomStringUtils.randomAlphanumeric-->buP1Nb
RandomStringUtils.randomNumeric-->754463
猫叫是什么原因
RandomStringUtils.random2--> 䥦 壠
九下语文
RandomStringUtils.random3.1-->xi<vBW
RandomStringUtils.random3.2-->syQFLj
RandomStringUtils.random4-->3a3ab1
RandomStringUtils.random5-->ac2312
RandomStringUtils.random6-->b1cb3a
注意:
源码中有这么⼀段
if ((letters && Character.isLetter(ch))
|| (numbers && Character.isDigit(ch))
|| (!letters && !numbers))
{}
很明显,只要letters和numbers有⼀个为true,其所⽣成的字符就必须被检验是否为字母或数字,所以当不限定搜索范围时,不建议使letters 和numbers为true。如API中的3、4、5。
做⼀个效率测试:
@Test
public void getSysChildrenMenusTest(){
int count = 100000;
long start = System.currentTimeMillis();
for (int i = 0;i < count; i++){
RandomStringUtils.randomAlphabetic(6);
}
long end = System.currentTimeMillis();
System.out.println("RandomStringUtils.randomAlphabetic-->" + (end-start));
熏陶怎么读
start = System.currentTimeMillis();
for (int i = 0;i < count; i++){
RandomStringUtils.randomNumeric(6);
}
end = System.currentTimeMillis();
System.out.println("RandomStringUtils.randomNumeric-->" + (end-start));
start = System.currentTimeMillis();
for (int i = 0;i < count; i++){
RandomStringUtils.randomAlphanumeric(6);
}
end = System.currentTimeMillis();
System.out.println("RandomStringUtils.randomAlphanumeric-->" + (end-start));
start = System.currentTimeMillis();
for (int i = 0;i < count; i++){
RandomStringUtils.random(6,'0','z',true, true);
}
end = System.currentTimeMillis();
System.out.println("RandomStringUtils.random‘0’-‘z’范围内-->" + (end-start));
char[] chars = new char[]{'1', '2', '3', '4','5', '6', '7', '8', '9', '0',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
start = System.currentTimeMillis();
for (int i = 0;i < count; i++){
RandomStringUtils.random(6,0,chars.length,fal, fal, chars);
}
end = System.currentTimeMillis();
System.out.println("RandomStringUtils.random使⽤指定的字符集-->" + (end-start));
}
out1:
RandomStringUtils.randomAlphabetic-->45
RandomStringUtils.randomNumeric-->204
RandomStringUtils.randomAlphanumeric-->47
RandomStringUtils.random‘0’-‘z’范围内-->37
RandomStringUtils.random使⽤指定的字符集-->21
out2:
RandomStringUtils.randomAlphabetic-->49
RandomStringUtils.randomNumeric-->97
RandomStringUtils.randomAlphanumeric-->17
RandomStringUtils.random‘0’-‘z’范围内-->26
RandomStringUtils.random使⽤指定的字符集-->16
out3:
RandomStringUtils.randomAlphabetic-->49
RandomStringUtils.randomNumeric-->204
word表格行高RandomStringUtils.randomAlphanumeric-->46
RandomStringUtils.random‘0’-‘z’范围内-->38
RandomStringUtils.random使⽤指定的字符集-->23
可以看到前⾯四种⽅法要不是不稳定的,要不是不如最后⼀种,因为其选择的字符集都有⾮数字和字母的字符,都会有出现的⼏率,有随机性。