一个产生随机字符串的类

小乔
• 阅读 101

经常要用到java来产生随机字符串,感觉org.apache.commons.lang.RandomStringUtils还是不够用,比如不能按照指定格式来产生随机串,因此自己写了一个RandomString类,放在这里记录一下。源文件在用法简介的后面。
一、用法简介:
//产生4位的,由数字和大写字母组成的随机字符串;
String s1=RandomString.get(4);

//产生5位的,由数字组成的随机字符串;
String s2=RandomString.getNum(5);

//产生6位的,由十六进制字符组成的随机字符串;
String s3=RandomString.getHex(6);

//产生如下格式的随机字符串“{E3-K91Z}”,“?”表示一个占位符;
String s4=RandomString.get("{??-????}");

//产生如下格式的随机字符串“Are you W5B?”,可以自己指定临时占位符,这里用“#”;
String s5=RandomString.get("Are you ###?",'#');
二、源文件:
public class RandomString {
private static final String src_number = "0123456789";
private static final String src_lower = "abcdefghijklmnopqrstuvwxyz";
private static final String src_upper = src_lower.toUpperCase();
private static final String src_hex_lower = "0123456789abcdef";
private static final String src_hex_upper = src_hex_lower.toUpperCase();
private static final String esc_char = "?";

public static String get(int size) {
StringBuffer r = new StringBuffer(size);
String src = src_number + src_upper;
for (int i = 0; i < size; i++) {
r.append(getRandomChar(src));
}
return r.toString();
}

public static String get(String format) {
StringBuffer r = new StringBuffer(format.length());
String src = src_number + src_upper;
for (int i = 0; i < format.length(); i++) {
String curr = String.valueOf(format.charAt(i));
if (curr.equalsIgnoreCase(esc_char)) {
r.append(getRandomChar(src));
} else {
r.append(curr);
}
}
return r.toString();
}

public static String get(String format, char esc) {
StringBuffer r = new StringBuffer(format.length());
String src = src_number + src_upper;
for (int i = 0; i < format.length(); i++) {
String curr = String.valueOf(format.charAt(i));
if (curr.equalsIgnoreCase(String.valueOf(esc))) {
r.append(getRandomChar(src));
} else {
r.append(curr);
}
}
return r.toString();
}

public static String getNum(int size) {
StringBuffer r = new StringBuffer(size);
String src = src_number;
for (int i = 0; i < size; i++) {
r.append(getRandomChar(src));
}
return r.toString();
}

public static String getNum(String format) {
StringBuffer r = new StringBuffer(format.length());
String src = src_number;
for (int i = 0; i < format.length(); i++) {
String curr = String.valueOf(format.charAt(i));
if (curr.equalsIgnoreCase(esc_char)) {
r.append(getRandomChar(src));
} else {
r.append(curr);
}
}
return r.toString();
}
//Java中文网:http://www.javaweb.cc
public static String getNum(String format, char esc) {
StringBuffer r = new StringBuffer(format.length());
String src = src_number;
for (int i = 0; i < format.length(); i++) {
String curr = String.valueOf(format.charAt(i));
if (curr.equalsIgnoreCase(String.valueOf(esc))) {
r.append(getRandomChar(src));
} else {
r.append(curr);
}
}
return r.toString();
}

public static String getHex(int size) {
StringBuffer r = new StringBuffer(size);
String src = src_hex_upper;
for (int i = 0; i < size; i++) {
r.append(getRandomChar(src));
}
return r.toString();
}

public static String getHex(String format) {
StringBuffer r = new StringBuffer(format.length());
String src = src_hex_upper;
for (int i = 0; i < format.length(); i++) {
String curr = String.valueOf(format.charAt(i));
if (curr.equalsIgnoreCase(esc_char)) {
r.append(getRandomChar(src));
} else {
r.append(curr);
}
}
return r.toString();
}

public static String getHex(String format, char esc) {
StringBuffer r = new StringBuffer(format.length());
String src = src_hex_upper;
for (int i = 0; i < format.length(); i++) {
String curr = String.valueOf(format.charAt(i));
if (curr.equalsIgnoreCase(String.valueOf(esc))) {
r.append(getRandomChar(src));
} else {
r.append(curr);
}
}
return r.toString();
}
//Java教程:http://www.javaweb.cc
private static final String getRandomChar(String src) {
if (null==src||"".equals(src)) {
return "";
}
return String.valueOf((src.charAt((int) (Math.random() * src.length()))));
}
}

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java异常总结
java.lang.ArithmeticException算术运算异常,因为除数为0,所以引发了算数异常java.lang.StringIndexOutOfBoundsException:Stringindexoutofrange:1这是截取字符串substring()产生的下标越界异常。原因是可能是字符串为空
Stella981 Stella981
3年前
Fortran根据系统时间生成随机数
FORTRAN中用于产生随机数的子程序有random\_seed和random\_number,其中random\_seed产生seed,random\_number根据seed的值产生随机数。当random\_seed()的参数为空时,其会给出一个默认的seed值,这意味着每次调用时产生的随机数都是相同的。(这也是有用的,这意味着你每次在执行程序的时候,会
Stella981 Stella981
3年前
Lua的String字符串拼接
每个语言都会遇到字符串拼接的问题。上回说到C的字符串拼接Concat,我们知道C中拼接许多字符串一般不用“”号,因为每次操作都会产生一个临时的字符串。所以C里面就提供了StringBuilder可变字符串来拼接,直到最后tostring的时候才会产生最终的string字符串。Lua语言里面默认是” ..“两个英文点号来表示字符串的拼接。但
Stella981 Stella981
3年前
SparkSql学习1 —— 借助SQlite数据库分析2000万数据
总所周知,Spark在内存计算领域非常强势,是未来计算的方向。Spark支持类Sql的语法,方便我们对DataFrame的数据进行统计操作。但是,作为初学者,我们今天暂且不讨论Spark的用法。我给自己提出了一个有意思的思维游戏:Java里面的随机数算法真的是随机的吗?好,思路如下:1\.取样,利用Java代码随机生成2000万条01
Wesley13 Wesley13
3年前
Java 生成随机数
Java中常用的两种产生随机数的方法一、java.lang.Math类中的random()方法;调用这个Math.random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是\0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀
Stella981 Stella981
3年前
HIVE之UDF函数开发
1为什么要写UDF函数    有时候hive自带的函数不能满足当前需要,需要自定义函数来解决问题2UDF,UDAF,UDTF的比较UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。
Wesley13 Wesley13
3年前
#随机数#生成指定范围的随机数
!illustration(https://static.oschina.net/uploads/img/201611/27002454_Ta76.jpg)捡起丢下一个多月的Java,重新复习书本上的东西,来到随机数这一部分:问题:生成指定范围的随机数,比如生成\10,20)区间内的随机整数、生成\0,50\区间内的随机整数。Java
Stella981 Stella981
3年前
Fortify漏洞之Insecure Randomness(不安全随机数)
继续对Fortify的漏洞进行总结,本篇主要针对InsecureRandomness漏洞进行总结,如下:1、InsecureRandomness(不安全随机数)1.1、产生原因:  成弱随机数的函数是random()。   电脑是一种具有确定性的机器,因此不可能
Stella981 Stella981
3年前
Spring Boot 配置随机数技巧
SpringBoot支持在系统加载的时候配置随机数。添加config/random.properties文件,添加以下内容:随机32位MD5字符串user.random.secret${random.value}随机int数字user.random.intNumber${random.int}
Python进阶者 Python进阶者
2年前
编写程序,随机产生30个1-100之间的随机整数,按5行6列的格式输出
大家好,我是皮皮。一、前言前几天在某乎上看到了一个粉丝提问,编写程序,随机产生30个1100之间的随机整数并存入5行6列的二维列表中,按5行6列的格式输出?这里拿出来跟大家一起分享下。二、实现过程后来问了【ChatGPT】,给出的回答如下:以下是一个Pyt
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。