使用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的更多相关文章

  1. RandomStringUtils工具类(java随机生成字符串)

    使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 ...

  2. java随机生成字符串(字符随机生成类 生成随机字符组合)

    原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...

  3. java随机生成字符串工具类

    package aA; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** * 字符随机 ...

  4. java随机生成字符串和校验

    首先定义字符串 String a = "0123456789"; // 数字 String b = "abcdefghijklmnopqrstuvwxyz"; ...

  5. java随机生成字符串并排序

    package com.Imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...

  6. java 随机生成4位随机数

    java 随机生成4位的随机数测试类 @org.junit.Testpublic void testRandom(){ String msg="您的注册码为%s,谢谢注册!"; S ...

  7. Java随机生成定长纯数字或数字字母混合数

    (转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码

  8. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  9. java中随机生成字符串的方法(三种)

    org.apache.commons.lang(2.6): 链接:https://pan.baidu.com/s/1k_oeA5AjSt6evoR7zT8gpQ 提取码:yhl5 1.生成的字符串每个 ...

  10. Java随机生成18位身份证号

    package com.ihome.data; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...

随机推荐

  1. iOS关于高德地图定位和热点搜索使用小结

    最近项目刚刚忙完,有空整理一下用到的相关技术点.地图是比较常见的功能模块,现在用的比较多的是地图当前位置显示,公交.骑行.步行路线信息,附近热点位置搜索.现在国内用的比较多的是高德.百度,国外的话可以 ...

  2. .NetCore 目录浏览 和 静态文件

    1.  静态文件 包:microsoft.aspdotnet.staticfiles app.UseStaticFiles()  会默认找到 wwwroot文件夹 // 匹配到指定条件然后执行中间件 ...

  3. 07 - react 唯一修改state状态的方式 setState

    // setState 修改状态 如果是直接修改页面不会改变 使用 setState 修改数据 才会驱动视图的改变 // setState 的原理:修改玩状态之后会调用 render 函数 impor ...

  4. C#中测试普通方法和对象类型以及泛型所需要的时间

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. ajax下载二进制文件(导出Excel)

    var url = 'http://127.0.0.1'; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // 也可以使用PO ...

  6. css常用布局之flex布局

    Flexbox 是一个一维的布局模式,它可以轻松地在不同的方向上排列子元素(称为 flex 项),即使它们的大小是未知或者是动态变化的.以下是 Flexbox 的一些关键概念: 容器和项: 启用 Fl ...

  7. 指针进阶(C语言终)

    1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候,我们学习了sizeof , sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是 ...

  8. 买了个mini主机当服务器

    虽然有苹果的电脑,但是在装一些软件的时候,从想着能不能有一个小型的服务器,免得各种设置什么帮我强各种别的导致Mac出现各种的异常,整体上的话去看了一些小的主机,看过苹果的MV迷你Mac,但是发现是太贵 ...

  9. IntelliJ IDEA 设置背景图片 随机快捷更换背景图片(附高清4K背景图N张)

    前言 开发过程枯燥乏味,何不为自己工作中添加点乐子呢,除了主题模板,我们可以设置IntelliJ IDEA 的背景图片,换个背景图,换个心情. IntelliJ IDEA 设置背景图片 注意: 必要的 ...

  10. 24/10/13 ABC375补题笔记

    A 典,属于显而易见的水题,这数据范围直接暴力做就行了. # include <bits/stdc++.h> using namespace std; int main (){ int n ...