每日一例 | 生成隨機字符串
生成隨機字符串
我們在日常開發(fā)中,經(jīng)常會遇到需要生成隨機字符串的需求,比如用戶的初始化密碼,但這種場景下并不適合使用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();
/**
* 生成字密碼的數(shù)量
*/
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是你要生成的隨機字符串的數(shù)量,length是生成的字符串長度。
生成隨機姓名
在生成測試數(shù)據(jù)的時候,你是不是也為人員起名字和用戶名而發(fā)愁呢?這里有一套生成隨機姓名的代碼,看看唄:
/**
* @program: example-2021.05.01
* @description: 隨機用戶名及姓名
* @author: syske
* @date: 2021-05-01 18:02
*/
public class RandomName {
public static String chineseString() {
char[] fristName = {'趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '孔', '江', '曹', '魏', '劉', '馮', '陳', '褚', '衛(wèi)', '蔣',
'沈', '韓', '楊', '朱', '秦', '尤', '許', '何', '呂', '施', '張', '戚', '謝', '鄒', '喻', '柏', '水', '竇', '章', '云', '蘇',
'潘', '葛', '奚', '范', '彭', '郎', '魯', '韋', '昌'};
String[] secondName = {"鴻煊", "博濤", "燁霖", "燁華", "煜祺", "智宸", "正豪", "昊然", "明杰", "立誠", "立軒", "立輝", "峻熙", "弘文", "熠彤",
"鴻煊", "燁霖", "哲瀚", "鑫鵬", "致遠(yuǎn)", "俊馳", "雨澤", "燁磊", "晟睿", "天佑", "文昊", "修潔", "黎昕", "遠(yuǎn)航", "旭堯", "鴻濤", "偉祺", "榮軒",
"越澤", "浩宇", "瑾瑜", "皓軒", "擎蒼", "擎宇", "志澤", "睿淵", "楷瑞", "子軒", "弘文", "哲瀚", "雨澤", "鑫磊", "修杰", "偉誠", "建輝", "晉鵬",
"天磊", "紹輝", "澤洋", "明軒", "健柏", "鵬煊", "昊強", "偉宸", "博超", "君浩", "子騫", "明輝", "德赫", "海藍(lán)", "紫云", "綠萍", "新凡", "孤彤",
"天藍(lán)", "采萍", "代楓", "憶芹", "小雁", "向陽", "谷蓮", "迎天", "惜夏", "安珍", "迎兒", "詩云", "依山", "凝桃", "新綠", "春容", "樂霜", "綠薇",
"元春", "靖萍", "癡綠", "綺真", "向菱", "碧綠", "寒安", "綺梅", "念春", "友易", "碧琴", "海珍", "春曼", "沛菱", "小風(fēng)", "聽薇", "語蕾", "千亦",
"元冬", "如楓", "曼筠", "書雪", "幼翠", "醉兒", "紫嵐", "爾秋", "秋雁", "雨陽", "易珊", "曼綠", "友松", "易波", "夜柔", "樂巧", "紫雪", "以晴",
"冬青", "惜薇", "白松", "丹亦", "爾梅", "如綠", "采雁", "盼芙", "小南", "平天", "笑天", "平柏", "憶柏", "訪琴", "秋楓", "含藍(lán)", "映嵐", "白萍",
"亦雙", "若柳", "詩藍(lán)", "安易", "癡海", "又靈", "水琴", "凡真", "懷云", "飛蕾", "新巧", "覓梅", "秋曼", "冷柔", "孤蕊", "雪露", "若雁", "安旋",
"曼云", "慕曼", "凌寒", "醉春", "醉山", "書萱", "巧琴", "靈蘭", "涵楓", "向曼", "迎文", "爾寒", "以芹", "芷凝", "凝柏", "慕陽", "千菱", "從蕾",
"千蕾", "水天", "飛楓", "冰山", "雁萍", "天凡", "癡珍", "夜桃", "語芙", "亦楓", "含梅", "友嵐", "千秋", "雁蕾", "冬桃", "懷巧", "平綠", "飛丹",
"又曼", "映之", "訪煙", "沛香", "宛菱", "半琴", "南蝶", "盼云", "芷松", "碧雁", "聽菡", "尋柔", "雅蝶", "慕雪", "雨蓮", "笑冬", "映卉", "初菱",
"安白", "聽萍", "海絲", "巧柏", "冬絲", "采靈", "寒卉", "聽薇", "妙翠", "元春", "覓凝"};
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
本項目會持續(xù)每日更新,讓我們一起學(xué)習(xí),一起進步,遇見更好的自己,加油呀
評論
圖片
表情
