每日一例 | 生成随机字符串
云中志
共 9555字,需浏览 20分钟
·
2021-05-02 10:22
生成随机字符串
我们在日常开发中,经常会遇到需要生成随机字符串的需求,比如用户的初始化密码,但这种场景下并不适合使用UUID
,这时候就需要我们自己来写这样一个算法,下面是我之前写过的,各位小伙伴参考下:
/**
* @program: example-2021.05.01
* @description: 2021-05-01-example
* @author: syske
* @date: 2021-05-01 17:30
*/
public class Example implements Readable {
private static Random random = new Random(47);
private static final char[] alls =
"abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@#!$%*&/".toCharArray();
/**
* 生成字密码的数量
*/
private int count;
/**
* 生成密码长度
*/
private int length;
/**
* 随机密码生成器
*
* @param count
* @param length
*/
public Example(int count,int length) {
this.count = count;
this.length = length;
}
@Override
public int read(CharBuffer cb) {
if (count-- == 0) {
return -1;
}
for (int i = 0; i < length; i++) {
cb.append(alls[random.nextInt(alls.length)]);
}
cb.append(" ");
return 0;
}
public static void main(String[] args) {
Scanner sc = new Scanner(new Example(3, 9));
while (sc.hasNext()) {
System.out.println(sc.next());
}
}
}
上面这个算法是支持批量生成的,count
是你要生成的随机字符串的数量,length
是生成的字符串长度。
生成随机姓名
在生成测试数据的时候,你是不是也为人员起名字和用户名而发愁呢?这里有一套生成随机姓名的代码,看看呗:
/**
* @program: example-2021.05.01
* @description: 随机用户名及姓名
* @author: syske
* @date: 2021-05-01 18:02
*/
public class RandomName {
public static String chineseString() {
char[] fristName = {'赵', '钱', '孙', '李', '周', '吴', '郑', '王', '孔', '江', '曹', '魏', '刘', '冯', '陈', '褚', '卫', '蒋',
'沈', '韩', '杨', '朱', '秦', '尤', '许', '何', '吕', '施', '张', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章', '云', '苏',
'潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦', '昌'};
String[] secondName = {"鸿煊", "博涛", "烨霖", "烨华", "煜祺", "智宸", "正豪", "昊然", "明杰", "立诚", "立轩", "立辉", "峻熙", "弘文", "熠彤",
"鸿煊", "烨霖", "哲瀚", "鑫鹏", "致远", "俊驰", "雨泽", "烨磊", "晟睿", "天佑", "文昊", "修洁", "黎昕", "远航", "旭尧", "鸿涛", "伟祺", "荣轩",
"越泽", "浩宇", "瑾瑜", "皓轩", "擎苍", "擎宇", "志泽", "睿渊", "楷瑞", "子轩", "弘文", "哲瀚", "雨泽", "鑫磊", "修杰", "伟诚", "建辉", "晋鹏",
"天磊", "绍辉", "泽洋", "明轩", "健柏", "鹏煊", "昊强", "伟宸", "博超", "君浩", "子骞", "明辉", "德赫", "海蓝", "紫云", "绿萍", "新凡", "孤彤",
"天蓝", "采萍", "代枫", "忆芹", "小雁", "向阳", "谷莲", "迎天", "惜夏", "安珍", "迎儿", "诗云", "依山", "凝桃", "新绿", "春容", "乐霜", "绿薇",
"元春", "靖萍", "痴绿", "绮真", "向菱", "碧绿", "寒安", "绮梅", "念春", "友易", "碧琴", "海珍", "春曼", "沛菱", "小风", "听薇", "语蕾", "千亦",
"元冬", "如枫", "曼筠", "书雪", "幼翠", "醉儿", "紫岚", "尔秋", "秋雁", "雨阳", "易珊", "曼绿", "友松", "易波", "夜柔", "乐巧", "紫雪", "以晴",
"冬青", "惜薇", "白松", "丹亦", "尔梅", "如绿", "采雁", "盼芙", "小南", "平天", "笑天", "平柏", "忆柏", "访琴", "秋枫", "含蓝", "映岚", "白萍",
"亦双", "若柳", "诗蓝", "安易", "痴海", "又灵", "水琴", "凡真", "怀云", "飞蕾", "新巧", "觅梅", "秋曼", "冷柔", "孤蕊", "雪露", "若雁", "安旋",
"曼云", "慕曼", "凌寒", "醉春", "醉山", "书萱", "巧琴", "灵兰", "涵枫", "向曼", "迎文", "尔寒", "以芹", "芷凝", "凝柏", "慕阳", "千菱", "从蕾",
"千蕾", "水天", "飞枫", "冰山", "雁萍", "天凡", "痴珍", "夜桃", "语芙", "亦枫", "含梅", "友岚", "千秋", "雁蕾", "冬桃", "怀巧", "平绿", "飞丹",
"又曼", "映之", "访烟", "沛香", "宛菱", "半琴", "南蝶", "盼云", "芷松", "碧雁", "听菡", "寻柔", "雅蝶", "慕雪", "雨莲", "笑冬", "映卉", "初菱",
"安白", "听萍", "海丝", "巧柏", "冬丝", "采灵", "寒卉", "听薇", "妙翠", "元春", "觅凝"};
int first = new Random().nextInt(fristName.length);
int second = new Random().nextInt(secondName.length);
return fristName[first] + secondName[second];
}
/**
* 返回指定长度的随机字符串
*
* @param count
* @return
*/
public static String createUserName(int count) {
char[] chs = {'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'
};
StringBuilder result = new StringBuilder();
for (int i = 0; i < count; i++) {
result.append(chs[new Random().nextInt(chs.length)]);
}
return result.toString();
}
public static void main(String[] args) {
// 生成姓名
System.out.println(chineseString());
// 生成用户名
System.out.println(createUserName(8));
}
}
项目路径:
https://github.com/Syske/example-everyday
本项目会持续每日更新,让我们一起学习,一起进步,遇见更好的自己,加油呀
- END -评论