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 ...
随机推荐
- 宝塔部署java后端项目
1. 安装插件 宝塔面板找到软件商店然后搜索 Java java项目管理安装 安装后点击设置准备安装 tomcat 2. 添加项目
- 自签openssl证书(包含泛域名)
1.安装openSSL weget http://www.openssl.org/source/openssl-1.0.0a.tar.gz Tar -zxvf openssl-1.0.0a.tar.g ...
- 实例:([Flappy Bird Q-learning]
目录 实例:(Flappy Bird Q-learning) 问题分析 关于Q 训练 成果 实例:(Flappy Bird Q-learning) 问题分析 让小鸟学习怎么飞是一个强化学习(reinf ...
- ABC270-d
题目 首先贪心是行不通的,考试的时候打了贪心,挂了...... 举个反例: 10 2 3 4 贪心枚举答案为4,但若高桥先选3,最大值为6. 其实考试的时候想到了dp,但是不会打 悲 因为青木也是聪明 ...
- Tarjan 算法
远古算法笔记. dfs 生成树 无向图 对于一张连通的无向图,我们可以从任意一点开始 dfs,得到原图的一棵生成树(以开始 dfs 的那个点为根). 这棵生成树上的边称作树边,不在生成树上的边称作非树 ...
- 在 KubeSphere 中使用 Rook 构建云原生存储环境
Rook 介绍 Rook 是一个开源的云原生存储编排器,为各种存储解决方案提供平台.框架和支持,以便与云原生环境进行原生集成. Rook 将分布式存储系统转变为自管理.自扩展.自修复的存储服务.它使存 ...
- 在 KubeSphere 中开启新一代云原生数仓 Databend
作者:尚卓燃(https://github.com/PsiACE),Databend 研发工程师,Apache OpenDAL (Incubating) PPMC. 前言 Databend 是一款完全 ...
- 修改文件的所有者失败(chown: changing ownership of `uploads': Operation not permitted)
在项目开发的时候,经常需要将文件上传到指定的目录下. 例如这次用thinkphp5的时候,需要在public目录下建立uploads目录用于存放上传的资源. 首先在命令窗口下输入: 1 mkdir u ...
- 从0到1实现项目Docker编排部署
在深入讨论 Docker 编排之前,首先让我们了解一下 Docker 技术本身.Docker 是一个开源平台,旨在帮助开发者自动化应用程序的部署.扩展和管理.自 2013 年推出以来,Docker 迅 ...
- Abp源码分析之Abp最小系统
最小系统 创建API项目 创建API项目并安装以下依赖 修改Program.cs为以下内容 using BookApp; var builder = WebApplication.CreateBuil ...