栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

根据不同的需求(数字、小写字母、大写字母组合,新增汉字,特殊字符、数字、大小写字母组合)产生指定位数的随机数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据不同的需求(数字、小写字母、大写字母组合,新增汉字,特殊字符、数字、大小写字母组合)产生指定位数的随机数

上一篇是只有数字和大小写字母的组合,这篇加上特殊字符和数字、大小写字母的组合以及只有汉字的单个组合

public class RandomString {

    
    public static final int FIGURE_onLY = 0;

    
    public static final int FIGURE_LOWER_CASE = 1;

    
    public static final int FIGURE_POWER_CASE = 2;

    
    public static final int LOWER_CASE_onLY = 3;

    
    public static final int POWER_CASE_onLY = 4;

    
    public static final int LOWER_CASE_POWER_CASE = 5;

    
    public static final int FIGURE_LOWER_CASE_POWER_CASE = 6;

    
    public static final int CHINESE_CHARACTER_onLY = 7;

    
    public static final int SPECIAL_CHARACTER_onLY = 8;

    
    public static final int FIGURE_SPECIAL_CHARACTER = 9;

    
    public static final int LOWER_CASE_SPECIAL_CHARACTER = 10;

    
    public static final int POWER_CASE_SPECIAL_CHARACTER = 11;

    
    public static final int LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER = 12;

    
    public static final int FIGURE_POWER_CASE_SPECIAL_CHARACTER = 13;

    
    public static final int FIGURE_LOWER_CASE_SPECIAL_CHARACTER = 14;

    
    public static final int FIGURE_LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER = 15;

    
    private static final String LETTER_STRING = "abcdefghijklmnopqrstuvwxyz";

    
    private static final String SPECIAL_CHARACTER_STRING = "!"#$%&'()*+,-.:;/<=>?@[\]^_`{|}~";

    public RandomString() {
    }

    public static String createRandomString(int length, int type) {
        switch (type) {
            // 只有数字
            case FIGURE_ONLY:
                // 只有小写字母
            case LOWER_CASE_ONLY:
                // 只有大写字母
            case POWER_CASE_ONLY:
                // 只有中文
            case CHINESE_CHARACTER_ONLY:
                // 只有特殊字符
            case SPECIAL_CHARACTER_ONLY:
                return oneCombination(type, length);

            // 数字+小写字母
            case FIGURE_LOWER_CASE:
                // 数字+大写字母
            case FIGURE_POWER_CASE:
                // 小写字母+大写字母
            case LOWER_CASE_POWER_CASE:
                // 数字+特殊字符
            case FIGURE_SPECIAL_CHARACTER:
                // 小写字母+特殊字符
            case LOWER_CASE_SPECIAL_CHARACTER:
                // 大写字母+特殊字符
            case POWER_CASE_SPECIAL_CHARACTER:
                return twoCombination(type, length);

            // 数字+小写字母+大写字母
            case FIGURE_LOWER_CASE_POWER_CASE:
                // 小写字母+大写字母+特殊字符
            case LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER:
                // 数字+小写字母+特殊字符
            case FIGURE_LOWER_CASE_SPECIAL_CHARACTER:
                // 数字+大写字母+特殊字符
            case FIGURE_POWER_CASE_SPECIAL_CHARACTER:
                return threeCombination(type, length);

            // 数字+小写字母+大写字母+特殊字符
            case FIGURE_LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER:
                return fourCombination(type, length);

            default:
                return "";
        }
    }

    
    private static String oneCombination(int type, int length) {
        StringBuilder builder = new StringBuilder();
        switch (type) {
            case FIGURE_ONLY:
                for (int i = 0; i < length; i++) {
                    builder.append(number());
                }
                return builder.toString();
            case LOWER_CASE_ONLY:
                for (int i = 0; i < length; i++) {
                    builder.append(lowerCase());
                }
                return builder.toString();
            case POWER_CASE_ONLY:
                for (int i = 0; i < length; i++) {
                    builder.append(powerCase());
                }
                return builder.toString();
            case CHINESE_CHARACTER_ONLY:
                for (int i = 0; i < length; i++) {
                    builder.append(chineseCharacter());
                }
                return builder.toString();
            case SPECIAL_CHARACTER_ONLY:
                for (int i = 0; i < length; i++) {
                    builder.append(specialCharacter());
                }
                return builder.toString();
            default:
                return "";
        }
    }

    
    private static String twoCombination(int type, int length) {
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        switch (type) {
            case FIGURE_LOWER_CASE:
                for (int i = 0; i < length; i++) {
                    builder.append(random.nextInt(2) == 0 ? number() : lowerCase());
                }
                return builder.toString();
            case FIGURE_POWER_CASE:
                for (int i = 0; i < length; i++) {
                    builder.append(random.nextInt(2) == 0 ? number() : powerCase());
                }
                return builder.toString();
            case LOWER_CASE_POWER_CASE:
                for (int i = 0; i < length; i++) {
                    builder.append(random.nextInt(2) == 0 ? lowerCase() : powerCase());
                }
                return builder.toString();
            case FIGURE_SPECIAL_CHARACTER:
                for (int i = 0; i < length; i++) {
                    builder.append(random.nextInt(2) == 0 ? number() : specialCharacter());
                }
                return builder.toString();
            case LOWER_CASE_SPECIAL_CHARACTER:
                for (int i = 0; i < length; i++) {
                    builder.append(random.nextInt(2) == 0 ? lowerCase() : specialCharacter());
                }
                return builder.toString();
            case POWER_CASE_SPECIAL_CHARACTER:
                for (int i = 0; i < length; i++) {
                    builder.append(random.nextInt(2) == 0 ? powerCase() : specialCharacter());
                }
                return builder.toString();

            default:
                return "";
        }
    }

    
    private static String threeCombination(int type, int length) {
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        int randomIndex;
        switch (type) {
            case FIGURE_LOWER_CASE_POWER_CASE:
                for (int i = 0; i < length; i++) {
                    randomIndex = random.nextInt(3);
                    builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? powerCase() : lowerCase());
                }
                return builder.toString();
            case LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER:
                for (int i = 0; i < length; i++) {
                    randomIndex = random.nextInt(3);
                    builder.append(randomIndex == 0 ? lowerCase() : randomIndex == 1 ? powerCase() : specialCharacter());
                }
                return builder.toString();
            case FIGURE_LOWER_CASE_SPECIAL_CHARACTER:
                for (int i = 0; i < length; i++) {
                    randomIndex = random.nextInt(3);
                    builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? lowerCase() : specialCharacter());
                }
                return builder.toString();
            case FIGURE_POWER_CASE_SPECIAL_CHARACTER:
                for (int i = 0; i < length; i++) {
                    randomIndex = random.nextInt(3);
                    builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? powerCase() : specialCharacter());
                }
                return builder.toString();
            default:
                return "";
        }
    }

    
    private static String fourCombination(int type, int length) {
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        int randomIndex;
        // 因为只有一个判断,所以就直接用if了,若有两个及以上可用switch
        if (type == FIGURE_LOWER_CASE_POWER_CASE_SPECIAL_CHARACTER) {
            for (int i = 0; i < length; i++) {
                randomIndex = random.nextInt(4);
                builder.append(randomIndex == 0 ? number() : randomIndex == 1 ? lowerCase() : randomIndex == 2 ? powerCase() : specialCharacter());
            }
            return builder.toString();
        }
        return "";
    }

    
    private static String number() {
        return String.valueOf((new Random()).nextInt(10));
    }

    
    private static String lowerCase() {
        return String.valueOf(LETTER_STRING.charAt((new Random()).nextInt(LETTER_STRING.length())));
    }

    
    private static String powerCase() {
        return String.valueOf(Character.toUpperCase(LETTER_STRING.charAt((new Random()).nextInt(LETTER_STRING.length()))));
    }

    
    private static String chineseCharacter() {
        return String.valueOf((char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));
    }

    
    private static String specialCharacter() {
        return String.valueOf(SPECIAL_CHARACTER_STRING.charAt((new Random()).nextInt(SPECIAL_CHARACTER_STRING.length())));
    }

}

调用:

该方法在随机产生 100000个字符耗时在3ms-300ms内及上下波动

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号