首页 文章详情

每日一例 | 生成随机字符串

云中志 | 321 2021-05-02 10:22 0 0 0
UniSMS (合一短信)

生成随机字符串

我们在日常开发中,经常会遇到需要生成随机字符串的需求,比如用户的初始化密码,但这种场景下并不适合使用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(39));
        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 -


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter