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:
| 序号 | 方法 | 说明 |
|---|---|---|
| 1 | random(int count) | 在所有字符中随机生成6位 |
| 2 | randomAscii(int count) | 在ASCII表中的打印字符中,即ASCII表32-127中随机生成6位 |
| 3 | randomAlphabetic(int count) | 生成只有字母的随机字符串,但是此方法效率不高,不建议这样使用 |
| 4 | randomAlphanumeric(int count) | 生成只有字母和数字的随机字符串,同样不建议这样使用 |
| 5 | randomNumeric(int count) | 生成只有数字的随机字符串,同样不建议这样使用 |
| 6 | random(int count, boolean letters, boolean numbers) | 可以指定是否要限定只生成字母或数字,上述三个方法都是调用此方法 |
| 7 | random(int count, int start, int end, boolean letters, boolean numbers) | 可以指定字符集开始的位置,即不用搜索所有全部字符,同时可指定是否指定是否只生成字母或数字 |
| 8 | random(int count, int start, int end, boolean letters, boolean numbers, char[] chars) | 用指定的字符集生成字符串 |
| 9 | random(int count, String chars) | 使用指定字符串的字符生成新的随机字符串 |
| 10 | String random(int count, char[] chars) | 用指定的字符集生成字符串,只是不能指定letters和numbers,其实还是调用了8 |
e.g.
按照源码顺序使用,其源码其实都是在调用基础方法
@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,false, false));
//第一种即是直接写字符对应的十进制
System.out.println("RandomStringUtils.random3.1-->" + RandomStringUtils.random(6,48,122,false, false));
//第二种是直接写字符,但要确保字符顺序不能写反
//这里我将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,false, false, 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,false, false, 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
RandomStringUtils.randomAlphanumeric-->46
RandomStringUtils.random‘0’-‘z’范围内-->38
RandomStringUtils.random使用指定的字符集-->23
可以看到前面四种方法要不是不稳定的,要不是不如最后一种,因为其选择的字符集都有非数字和字母的字符,都会有出现的几率,有随机性。
java 随机生成字符串 RandomStringUtils的更多相关文章
- RandomStringUtils工具类(java随机生成字符串)
使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 ...
- java随机生成字符串(字符随机生成类 生成随机字符组合)
原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...
- java随机生成字符串工具类
package aA; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** * 字符随机 ...
- java随机生成字符串和校验
首先定义字符串 String a = "0123456789"; // 数字 String b = "abcdefghijklmnopqrstuvwxyz"; ...
- java随机生成字符串并排序
package com.Imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- java 随机生成4位随机数
java 随机生成4位的随机数测试类 @org.junit.Testpublic void testRandom(){ String msg="您的注册码为%s,谢谢注册!"; S ...
- Java随机生成定长纯数字或数字字母混合数
(转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码
- c# .Net随机生成字符串代码
/// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...
- java中随机生成字符串的方法(三种)
org.apache.commons.lang(2.6): 链接:https://pan.baidu.com/s/1k_oeA5AjSt6evoR7zT8gpQ 提取码:yhl5 1.生成的字符串每个 ...
- Java随机生成18位身份证号
package com.ihome.data; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...
随机推荐
- is特性
is是特性在动态路由的时候使用 ,在挂载点 component 使用,用来判断哪个组件显示 :
- 在 K8s 集群上部署 RabbitMQ 实战
作者:老Z,云原生爱好者,目前专注于云原生运维,KubeSphere Ambassador. 前言 知识点 定级:入门级 RabbitMQ 单节点安装部署 RabbitMQ 集群安装部署 GitOps ...
- 用easyVget下载B站油管视频
B站油管等视频平台简直就是无所不有的宝库,动漫.番剧.纪录片.科普,更有海量的学习资源,可以极大地满足你的视觉欲和求知欲. 作为一只视频仓鼠,我热衷于下载自己感兴趣的视频到本地,不用担心视频被和谐.不 ...
- NDT论文翻译
The Normal Distributions Transform: A New Approach to Laser Scan Matching 正态分布变换:激光扫描匹配的新方法 摘要:匹配 2D ...
- 指针进阶(C语言终)
1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候,我们学习了sizeof , sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是 ...
- 使用 ollama 在本地试玩 LLM
在 chatGPT 的推动下.LLM 简直火出天际,各行各业都在蹭.听说最近 meta 开源的 llama3 模型可以轻松在普通 PC 上运行,这让我也忍不住来蹭一层.以下是使用 ollama 试玩 ...
- Flink window
窗口计算 我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题.Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处 ...
- ABP使用基于JWT标准的的Token访问API
这里就不详细介绍JWT了,JWT的详细介绍可以查看简书的这篇文章,写得非常详细:http://www.jianshu.com/p/576dbf44b2ae 1.申请Token ABP内部已经为我们实现 ...
- 拯救php性能的神器webman-数据库
有了webman的这个框架,我们得看看它是怎么使用数据库的,毕竟我们不能一直用内存变量啊. 好,很简单一句话跑起来. composer require -W illuminate/database i ...
- mouseup模拟drag与click事件冲突
今天要说一个很隐晦的东西,一般可能很难碰到,碰到了可能很难解决.就是当我们自己用mousestart,mousemove,mouseup做自定义拖拽效果的时候,如果这个时候配上click就会引发一个拖 ...