随机工具类

本文介绍了RandomUtil类,包含生成随机整数、邮箱、电话号码、布尔值、字符串(不同格式)、汉字字符和中文名字的方法,以及模拟指定范围内的日期和日期时间。这些工具对于日常开发中的随机测试和数据填充非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.hc.utils;
 
import java.io.UnsupportedEncodingException;
import java.time.*;
import java.util.Date;
import java.util.Random;
 
public class RandomUtil {
 
    /**
     * 产生指定范围内的随机整数
     *
     * @param min 最小值
     * @param max 最大值
     * @return 指定范围内的随机数
     */
    public static int genInteger(int min, int max) {
        int res = (int) (Math.random() * (max - min + 1) + min);
        return res;
    }
 
    /**
     * 随机生成指定长度的邮箱
     * @param len 长度
     * @return
     */
    public static String genEmail(int len){
        String pre = genString(4, len);
        String[] tmp = {"126","163","qq","gmail","hotmail"};
        String suffix = tmp[genInteger(0,tmp.length-1)];
        return pre+"@"+suffix+".com";
    }
 
    /**
     * 随机生成电话号码
     *
     * @return
     */
    public static String genPhoneNum() {
        String[] prefix = {"132", "133", "134", "135", "136", "138", "139", "152", "154", "155", "177", "188" };
        int index = genInteger(0, prefix.length - 1);
        String res = prefix[index] + genString(1, 8);
        return res;
    }
 
    /**
     * 随机产生一个boolean值
     *
     * @return 返回true或false
     */
    public static boolean genBoolean() {
        boolean res = genInteger(0, 1) == 0 ? true : false;
        return res;
    }
 
 
    /**
     * 随机生成字符串
     *
     * @param type 类型:1纯数字,2纯小写,3纯大写,4大小写,5数字字母混合,6单个汉字
     * @param len  字符串长度
     * @return
     */
    public static String genString(int type, int len) {
        String res = "";
        String alphab = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
        switch (type) {
            case 1: //数字
                for (int i = 0; i < len; i++) {
                    int ch = genInteger(48, 57);
                    res = res + (char) ch;
                }
                break;
            case 2: //小写
                for (int i = 0; i < len; i++) {
                    int ch = genInteger(97, 122);
                    res = res + (char) ch;
                }
                break;
            case 3://大写
                for (int i = 0; i < len; i++) {
                    int ch = genInteger(65, 122); //产生[0,9]之间的随机数
                    res = res + ch;
                }
                break;
            case 4://大小写
                for (int i = 0; i < len; i++) {
                    int index = genInteger(0, 51); //产生[0,9]之间的随机数
                    if (index >= 91 && index <= 96) {
                        i--;
                        continue;
                    }
                    char ch = alphab.charAt(index);
                    res = res + ch;
                }
                break;
            case 5: //数字字母
                for (int i = 0; i < len; i++) {
                    int index = genInteger(0, 51); //产生[0,9]之间的随机数
                    if ((index >= 91 && index <= 96) || (index >= 58 && index <= 64)) {
                        i--;
                        continue;
                    }
                    char ch = alphab.charAt(index);
                    res = res + ch;
                }
                break;
            case 6:
                for (int i = 0; i < len; i++) {
                    res += genRandomChineseChar();
                }
                break;
            default:
                System.out.println("输入类型错误");
        }
        return res;
    }
 
    /**
     * 随机生成一个常见的汉字字符
     *
     * @return
     */
    private static char genRandomChineseChar() {
        String str = "";
        Random random = new Random();
 
        int hightPos = (176 + Math.abs(random.nextInt(39)));
        int lowPos = (161 + Math.abs(random.nextInt(93)));
 
        byte[] b = new byte[2];
        b[0] = (Integer.valueOf(hightPos)).byteValue();
        b[1] = (Integer.valueOf(lowPos)).byteValue();
 
        try {
            str = new String(b, "GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            System.out.println("错误");
        }
        return str.charAt(0);
    }
 
    /**
     * 随机生成中文名字
     *
     * @return
     */
    public static String genChineseName() {
        Random random = new Random();
        String firstNames = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季";
        String girl = "秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽";
        String boy = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";
 
        int index = random.nextInt(firstNames.length() - 1);
        String name = "" + firstNames.charAt(index); //获得一个随机的姓氏
 
        int i = random.nextInt(3);//可以根据这个数设置产生的男女比例
        if (i == 2) {
            int j = random.nextInt(girl.length() - 2);
            if (j % 2 == 0) {
                name = name + girl.substring(j, j + 2);
            } else {
                name = name + girl.substring(j, j + 1);
            }
        } else {
            int j = random.nextInt(girl.length() - 2);
            if (j % 2 == 0) {
                name = name + boy.substring(j, j + 2);
            } else {
                name = name + boy.substring(j, j + 1);
            }
 
        }
        return name;
    }
 
    /**
     * 生成指定范围内的随机日期时间
     * @param min 起始日期,比如:2000-3-3 8:28:58
     * @param max 终止日期,比如:2004-12-12 12:12:12
     * @return
     */
    public static LocalDateTime genLocalDateTime(String min, String max) {
        if(!(min.contains(" ") || min.contains("-") || min.contains(":"))){
            throw new RuntimeException("日期参数格式不对");
        }
        if(!(max.contains(" ") || max.contains("-") || max.contains(":"))){
            throw new RuntimeException("日期参数格式不对");
        }
        String[] mins = min.split("[ ,\\-,:]");
        String[] maxs = max.split("[ ,\\-,:]");
 
        LocalDateTime localDateTimeMin = LocalDateTime.of(Integer.parseInt(mins[0]), Integer.parseInt(mins[1]),
                Integer.parseInt(mins[2]),Integer.parseInt(mins[3]),Integer.parseInt(mins[4]),Integer.parseInt(mins[5]));
        LocalDateTime localDateTimeMax = LocalDateTime.of(Integer.parseInt(maxs[0]), Integer.parseInt(maxs[1]),
                Integer.parseInt(maxs[2])+1,Integer.parseInt(mins[3]),Integer.parseInt(mins[4]),Integer.parseInt(mins[5]));
 
        //获取日期所对应的数字
        long timeMin = localDateTimeMin.toInstant(ZoneOffset.of("+8")).toEpochMilli();
        long timeMax = localDateTimeMax.toInstant(ZoneOffset.of("+8")).toEpochMilli();
 
        double random = Math.random(); // [0,1)
        long digit = (long) (random * (timeMax - timeMin + 1) + timeMin);
 
        LocalDateTime res = LocalDateTime.ofInstant(Instant.ofEpochMilli(digit), ZoneOffset.of("+8"));
 
        return res;
    }
 
    /**
     * 生成指定范围内的随机日期
     * @param min 起始日期,比如:2000-3-3
     * @param max 终止日期,比如:2004-12-12
     * @return
     */
    public static LocalDate genLocalDate(String min, String max) {
        if(!min.contains("-")){
            throw new RuntimeException("日期参数格式不对");
        }
        if(!max.contains("-")){
            throw new RuntimeException("日期参数格式不对");
        }
        min +=" 0:0:0";
        max +=" 23:59:60";
        LocalDateTime res = genLocalDateTime(min,max);
 
        return res.toLocalDate();
    }
 
    public static void main(String[] args) {
        System.out.println(genInteger(10, 99));
        System.out.println(genPhoneNum());
        System.out.println(genBoolean());
        System.out.println(genString(1, 8));
        System.out.println(genString(2, 8));
        System.out.println(genString(3, 8));
        System.out.println(genString(4, 8));
        System.out.println(genString(5, 8));
        System.out.println(genString(6, 8));
        System.out.println(genChineseName());
 
        for(int i =0;i<10;i++) {
            LocalDateTime res = RandomUtil.genLocalDateTime("1999-12-12 8:28:58", "2000-12-12 11:3:22");
            System.out.println(res);
            System.out.println(genLocalDate("1999-9-21", "2019-9-21"));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值