每日一例 | 生成随机字符串
生成随机字符串
我们在日常开发中,经常会遇到需要生成随机字符串的需求,比如用户的初始化密码,但这种场景下并不适合使用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
本项目会持续每日更新,让我们一起学习,一起进步,遇见更好的自己,加油呀
评论
