【Java随机生成中文姓名】

随机生成中文姓名

目的:
GenerateName 类的目的是从预定义的 JSON 文件中加载中文姓名数据,并能够随机生成中文姓名,调用时控制循环次数,即可生成n个随机中文姓名。
调用只需:

        for (int i = 0; i < 100; i++) {
            System.out.println(new GenerateName().getRandomName());
        }

即可生成如下的名字:

晋悦昌 荣慧  喻忆  訾祥兵 程谦  齐珍  蒙媛琴 梁厚益 勾声安 毛雨健 巫发士 车雄嘉 仲孙霞蓓 束继云 荆毅彤 和莲  牛迅  薄雅迎 商峰元 郁爱  余月霏 郁发宇 东石咏 阎中  牧群  闻人桐诗 邬采  鞠倩  甘润  益进  岑勇  左丘崊  伊名  公西捷  闫霏  董伶  纪娇  西门南  晋笑  符萌宏 章凝  孟化俊 鞠玹  惠章义 瞿仪  奚振化 郏泊  耿麟婧 阚熙  巩娴  匡春  郜生惠 解茜俊 蓝伊继 红孝婉 陶棋  艾宪  周勇为 姜碧  沈杨纶 雍溓  计刚建 宗政成根 邓靓冉 万仁  裘瑞  孙毅紫 倪焘春 鞠善淇 融芷德 郁森  熊宜  融可业 简东娆 东国汝 漆雕亦苹 计融  徐哲  武科  祝定浩 全诚理 农方  邢利  弓竹钰 班俪  弓章恒 王敖筱 冉贝  邬仪  邢奇海 匡才  向乔萌 夔秋品 卜运瀚 禄林  别帆至 谢芸征 郎润勇 葛起  阙辉  

实现方法:

  1. 数据加载
    类在构造时使用 ObjectMapper 从类路径下的 /name.json 文件中读取姓名数据。数据被解析为一个 NameData 对象,该对象包含两个列表:surnames(姓氏)和 givenNames(名字)。

public GenerateName() {
    try {
        ObjectMapper mapper = new ObjectMapper();
        NameData data = mapper.readValue(getClass().getResourceAsStream("/name.json"), NameData.class);
        this.surnames = data.getSurnames();
        this.givenNames = data.getGivenNames();
    } catch (IOException e) {
        throw new NameDataLoadingException("Failed to load name data from '/name.json'", e);
    }
}

如果数据加载失败,将抛出自定义的 NameDataLoadingException。

  1. 随机姓名生成
    getRandomName 方法使用 Random 类实例来随机选择一个姓氏和两个名字,并将它们拼接成一个字符串返回。
public String getRandomName() {
    String surname = surnames.get(random.nextInt(surnames.size()));
    String givenName = givenNames.get(random.nextInt(1, givenNames.size()));
    String givenName2 = givenNames.get((random.nextInt(givenNames.size())) * (random.nextInt(2)));
    return surname + givenName + givenName2;
}
  1. 辅助类和异常
    NameData 类是一个简单的数据容器,用于存储从 JSON 文件中加载的姓氏和名字列表。
    NameDataLoadingException 是一个自定义异常类,当无法从 JSON 文件加载数据时抛出。
    使用方法
    创建 GenerateName 实例,并调用getRandomName方法来获取一个随机生成的中文姓名。

注意事项

  • 确保 /name.json 文件位于类路径上,并且格式正确。
  • getRandomName 方法假定 givenNames 列表至少包含两个名字。

实现源码:

  • GenerateName.java
/**
 * GenerateName 类用于从提供的姓名数据中随机生成姓名。
 */
package org.example.util;//导入后需要修改

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
import java.util.Random;

public class GenerateName {
    private List<String> surnames; // 姓氏列表
    private List<String> givenNames; // 名字列表
    private final Random random = new Random(); // 用于生成随机数

    /**
     * GenerateName 的构造函数。在对象创建时自动加载姓名数据。
     * @throws NameDataLoadingException 如果无法从资源文件中加载姓名数据,则抛出异常。
     */
    public GenerateName() {
        try {
            ObjectMapper mapper = new ObjectMapper();
            NameData data = mapper.readValue(getClass().getResourceAsStream("/name.json"), NameData.class);
            this.surnames = data.getSurnames();
            this.givenNames = data.getGivenNames();
        } catch (IOException e) {
            throw new NameDataLoadingException("Failed to load name data from '/name.json'", e);
        }
    }

    /**
     * 随机生成一个姓名。
     * @return 返回一个由随机选择的姓氏和名字组成的字符串。
     */
    public String getRandomName() {
        // 从姓氏列表中随机选择一个姓氏
        String surname = surnames.get(random.nextInt(surnames.size()));

        // 从名字列表中随机选择一个或两个名字
        String givenName = givenNames.get(random.nextInt(1, givenNames.size()));
        String givenName2 = givenNames.get((random.nextInt(givenNames.size())) * (random.nextInt(2)));

        // 组合姓氏和名字并返回
        return surname + givenName + givenName2;
    }

    /**
     * NameData 内部类用于存储从 JSON 文件中加载的姓氏和名字数据。
     */
    private static class NameData {
        private List<String> surnames;
        private List<String> givenNames;

        public List<String> getSurnames() {
            return surnames;
        }

        public List<String> getGivenNames() {
            return givenNames;
        }
    }

    /**
     * NameDataLoadingException 是一个运行时异常类,用于在加载姓名数据失败时抛出。
     */
    public static class NameDataLoadingException extends RuntimeException {
        public NameDataLoadingException(String message, Throwable cause) {
            super(message, cause);
        }
    }
}

  • name.json
{
  "surnames": [
    "赵", "钱", "孙", "李", "周", "吴", "郑", "王",
    "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨",
    "朱", "秦", "尤", "许", "何", "吕", "施", "张",
    "孔", "曹", "严", "华", "金", "魏", "陶", "姜",
    "戚", "谢", "邹", "喻", "柏", "水", "窦", "章",
    "云", "苏", "潘", "葛", "奚", "范", "彭", "郎",
    "鲁", "韦", "昌", "马", "苗", "凤", "花", "方",
    "俞", "任", "袁", "柳", "酆", "鲍", "史", "唐",
    "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤",
    "滕", "殷", "罗", "毕", "郝", "邬", "安", "常",
    "乐", "于", "时", "傅", "皮", "卞", "齐", "康",
    "伍", "余", "元", "卜", "顾", "孟", "平", "黄",
    "和", "穆", "萧", "尹", "姚", "邵", "湛", "汪",
    "祁", "毛", "禹", "狄", "米", "贝", "明", "臧",
    "计", "伏", "成", "戴", "谈", "宋", "茅", "庞",
    "熊", "纪", "舒", "屈", "项", "祝", "董", "梁",
    "杜", "阮", "蓝", "闵", "席", "季", "麻", "强",
    "贾", "路", "娄", "危", "江", "童", "颜", "郭",
    "梅", "盛", "林", "刁", "钟", "徐", "邱", "骆",
    "高", "夏", "蔡", "田", "樊", "胡", "凌", "霍",
    "虞", "万", "支", "柯", "昝", "管", "卢", "莫",
    "经", "房", "裘", "缪", "干", "解", "应", "宗",
    "丁", "宣", "贲", "邓", "郁", "单", "杭", "洪",
    "包", "诸", "左", "石", "崔", "吉", "钮", "龚",
    "程", "嵇", "邢", "滑", "裴", "陆", "荣", "翁",
    "荀", "羊", "於", "惠", "甄", "曲", "家", "封",
    "芮", "羿", "储", "靳", "汲", "邴", "糜", "松",
    "井", "段", "富", "巫", "乌", "焦", "巴", "弓",
    "牧", "隗", "山", "谷", "车", "侯", "宓", "蓬",
    "全", "郗", "班", "仰", "秋", "仲", "伊", "宫",
    "宁", "仇", "栾", "暴", "甘", "钭", "厉", "戎",
    "祖", "武", "符", "刘", "景", "詹", "束", "龙",
    "叶", "幸", "司", "韶", "郜", "黎", "蓟", "薄",
    "印", "宿", "白", "怀", "蒲", "邰", "从", "鄂",
    "索", "咸", "籍", "赖", "卓", "蔺", "屠", "蒙",
    "池", "乔", "阴", "郁", "胥", "能", "苍", "双",
    "闻", "莘", "党", "翟", "谭", "贡", "劳", "逄",
    "姬", "申", "扶", "堵", "冉", "宰", "郦", "雍",
    "却", "璩", "桑", "桂", "濮", "牛", "寿", "通",
    "边", "扈", "燕", "冀", "郏", "浦", "尚", "农",
    "温", "别", "庄", "晏", "柴", "瞿", "阎", "充",
    "慕", "连", "茹", "习", "宦", "艾", "鱼", "容",
    "向", "古", "易", "慎", "戈", "廖", "庾", "终",
    "暨", "居", "衡", "步", "都", "耿", "满", "弘",
    "匡", "国", "文", "寇", "广", "禄", "阙", "东",
    "欧", "殳", "沃", "利", "蔚", "越", "夔", "隆",
    "师", "巩", "厍", "聂", "晁", "勾", "敖", "融",
    "冷", "訾", "辛", "阚", "那", "简", "饶", "空",
    "曾", "毋", "沙", "乜", "养", "鞠", "须", "丰",
    "巢", "关", "蒯", "相", "查", "后", "荆", "红",
    "游", "竺", "权", "逯", "盖", "益", "桓", "公",
    "晋", "楚", "闫", "鄢", "涂", "钦", "岳", "帅",
    "段", "干", "商", "牟", "佘", "赏", "阳", "佟",
    "墨", "哈", "谯", "爱", "万俟", "司马", "上官",
    "夏侯", "诸葛", "闻人", "东方",
    "赫连", "皇甫", "尉迟", "公羊",
    "澹台", "公冶", "宗政", "欧阳",
    "淳于", "单于", "太叔", "申屠",
    "公孙", "仲孙", "轩辕", "令狐",
    "钟离", "宇文", "长孙", "慕容",
    "鲜于", "闾丘", "司徒", "司空",
    "丌官", "司寇", "子车", "法汝",
    "颛孙", "端木", "巫马", "公西",
    "漆雕", "乐正", "壤驷", "公良",
    "拓跋", "夹谷", "宰父", "谷梁",
    "百里", "东郭", "呼延", "南宫",
    "梁丘", "左丘", "东门", "西门"

  ],
  "givenNames": [" ",
    "权", "羽", "月", "蒙", "朋", "略", "奎", "韵", "嘉", "方",
    "紫", "淼", "姗", "春", "炳", "纯", "麒", "彩", "洺", "顺",
    "凝", "宣", "辰", "诒", "家", "川", "恒", "谨", "可", "山",
    "璟", "棋", "丞", "雪", "晔", "献", "岩", "莲", "友", "振",
    "璐", "廷", "佩", "言", "学", "焘", "选", "昌", "俪", "洪",
    "章", "诗", "厚", "承", "雨", "儒", "珑", "芷", "歌", "旭",
    "生", "喜", "茂", "臻", "裕", "津", "华", "健", "声", "励",
    "菁", "佳", "勋", "萍", "汝", "勤", "梦", "跃", "雄", "若",
    "连", "毓", "霖", "霏", "冠", "菊", "芸", "崊", "聪", "育",
    "建", "和", "敬", "帆", "湾", "谋", "晨", "全", "偌", "靓",
    "雷", "骄", "继", "钊", "卫", "颖", "世", "显", "珊", "晴",
    "优", "函", "苒", "保", "阳", "儿", "莹", "映", "展", "北",
    "鹏", "琪", "标", "虹", "巧", "锋", "贤", "佚", "洁", "芳",
    "允", "康", "麟", "革", "与", "好", "巩", "玲", "道", "功",
    "泓", "冬", "孟", "珺", "渲", "瑾", "吉", "碧", "祥", "蔚",
    "露", "畅", "邦", "孝", "筱", "沛", "礼", "渺", "谱", "燕",
    "才", "岚", "照", "男", "珠", "婧", "政", "隆", "海", "开",
    "立", "骅", "谊", "美", "仪", "艳", "然", "为", "菡", "禾",
    "淇", "忻", "融", "爱", "勇", "韬", "尚", "忠", "理", "朝",
    "城", "启", "钧", "萱", "毅", "百", "荣", "长", "莉", "舒",
    "天", "黎", "罡", "昊", "万", "明", "曼", "婉", "娇", "传",
    "帅", "炜", "奇", "灿", "艺", "鲁", "梅", "纪", "怀", "营",
    "航", "容", "慧", "少", "骏", "希", "培", "申", "蓓", "国",
    "会", "昕", "丰", "旻", "汉", "巍", "彦", "兵", "垒", "潞",
    "翰", "清", "军", "伦", "冰", "诚", "绍", "同", "涛", "祺",
    "剑", "钦", "桂", "朗", "平", "涵", "誉", "贵", "琴", "棠",
    "凯", "臣", "志", "妹", "珮", "金", "焕", "加", "卉", "力",
    "钢", "备", "寿", "灵", "基", "娆", "凤", "子", "任", "中",
    "磊", "升", "曦", "安", "光", "雯", "如", "风", "定", "西",
    "琳", "济", "向", "发", "湘", "英", "源", "星", "非", "迅",
    "雅", "洋", "秀", "捷", "丛", "心", "雁", "进", "科", "望",
    "登", "智", "其", "波", "滔", "娴", "静", "真", "群", "伟",
    "锐", "凡", "枫", "桐", "怡", "倩", "盛", "竹", "珍", "时",
    "豪", "议", "亿", "斌", "璇", "珂", "洲", "琦", "宪", "漫",
    "堂", "君", "瀚", "兆", "常", "宁", "双", "笑", "先", "泰",
    "年", "有", "业", "溓", "瑜", "茜", "睿", "益", "泉", "涓",
    "蓉", "浩", "贝", "红", "泽", "晓", "延", "劲", "田", "逸",
    "影", "惠", "玟", "博", "蓝", "兰", "骁", "思", "玉", "克",
    "根", "伊", "彬", "小", "润", "敖", "牧", "皓", "江", "丽",
    "伯", "南", "盈", "彤", "馨", "萌", "鸿", "叶", "达", "沁",
    "晋", "品", "云", "采", "齐", "忆", "悦", "森", "瑷", "景",
    "腾", "晖", "耀", "威", "卿", "朦", "广", "镇", "依", "至",
    "石", "菏", "媛", "之", "亦", "起", "义", "梓", "松", "坤",
    "素", "芬", "赏", "杰", "昭", "丹", "材", "韦", "滨", "俊",
    "咏", "峰", "利", "轩", "香", "震", "名", "扬", "晗", "熙",
    "妮", "玮", "潇", "婷", "欣", "琛", "卓", "谦", "大", "彪",
    "锦", "兴", "策", "宗", "元", "铭", "多", "凌", "丫", "溪",
    "宏", "易", "福", "乐", "朔", "崇", "充", "沣", "亮", "州",
    "语", "鑫", "树", "青", "琸", "霞", "书", "翔", "德", "楚",
    "夫", "文", "超", "林", "玹", "恩", "行", "嫒", "富", "仁",
    "蕊", "奕", "宜", "鸣", "满", "柏", "蕾", "茗", "铁", "予",
    "愉", "来", "爽", "朵", "意", "甜", "宝", "晶", "聆", "芝",
    "宇", "久", "钰", "瑶", "逦", "运", "妍", "亭", "武", "一",
    "乔", "岳", "潮", "聚", "蔓", "水", "夏", "冉", "睻", "靖",
    "栋", "胜", "秋", "维", "虎", "颜", "彰", "姿", "正", "祖",
    "成", "良", "娟", "银", "坚", "晟", "日", "亚", "尧", "鹤",
    "东", "乃", "庆", "瑞", "信", "仲", "杨", "泊", "哲", "圣",
    "强", "霄", "珏", "微", "敏", "迎", "驰", "迪", "远", "赫",
    "伶", "京", "娜", "刚", "永", "龙", "舜", "飞", "菲", "高",
    "新", "莺", "越", "苹", "识", "庭", "怿", "民", "楠", "士",
    "征", "妙", "淑", "纶", "辉", "善", "锡", "化"
  ]
}

完~

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码简单干净,易于扩展。 随机生成用户名样例: 339063 77188 fengjr1980@yeah.net 97133 xupe19870102@sohu.com 18955990722 2145028 25070167 299966 13329809029 18739552501 77223 725525865 cheng1991 chub1974 13290062609 wangf19750725 caot19850619 545121 qianih19760611@msn.com 15208376363 xieww1979 shixd0904@126.com 18035677437 80892 18967033182 18923271615 15506730128 19741 fangi0713 15829813954 58285 yuanr19730429 shenpk 79607 15430 15226507276 13905108731 71852 qianmp19900629 15578331045 28116 18636868380 41560 zhengk1009@qq.com chuh19901023 269195 5678146 29585 18416167445 konghs1014 13404997586 30505 13647749758 13153649262 18779413966 wangqq1985 18906839566 18915522113 13392180833 1539516 zhaod19960502@ask.com 422424 heee0615 fengc@163.com 39174 xuyv19780415 15463681074 700812 73013 xuh0513 15505384990 hedd19940702 54021 xum19930812 youy1991 qiner 18033283015 yangwc 57195 qinu shenk0513 zhoufg 94597 95435 zhanvn1985 qiankh0104@ask.com kongw1993 zhuhv 15922309734 15015131852 15617928674 13135363801 18249225151 81438 13163635474 18615772400 hes0510 460915 wum19781014 491159 shenh1973 625701 34613 15732006897 fengdk1985 18517435664 13412117745 10157 chuza1993@163.com zhaokk0810@sina.com 34270 7744626 sunb0122 71114 91762 18506579548 yangmy0227 18791566645 13250565847 jiangvk1977 15250922291 37579 wangci1965 wangpq wango19850516 18531237843 18589683471 hegl1990 18714299209 zhant@gmail.com 29016 zhux1969 xiez1113 zhengtw 15490897758 18917969768 18149215132 18608279756 17149 18644736737 zhaov19880816 xuy@aol.com 5854142 18408454618 qinl1988 xubl1990 18852302621 18985792169 42928 18622907192 fanggs19960616@163.com 25150 47585 15086377222 617299 13447565144 668953950 4342797 18638890078 fangiq0615 zhuo19701127@ask.com 421528 15690966759 18058824538 18194138008 15770603106 heag0813 15793392577 470979 18402649812 1791830 18397977938 shukj19960528 87052642 chulu0119 jiangj1986 13210747847 47359 80638214 zhuey0405 94017 13636960571 18939715988 yuani0529@msn.com 58081 caodm1989 18420167788 13951603849 10205 164883 15513277337 29553 15011669462 87997 zhanji 29763568 13032055621 13617051541 lit
Java随机生成女性名字的方法可以通过以下的步骤实现。 首先,我们可以在一个字符串数组中包含一些常见的女性名字。例如可以包含的名字有:小芳、晓霞、丽娜、婷婷、丹丹等等。可以根据实际需要增减这个数组中的名字。 接下来,我们可以使用Java中的Random类来生成一个随机的索引值。Random类可以通过调用nextInt方法来生成一个指定范围内的随机整数。 然后,我们可以使用生成随机索引值来从之前的字符串数组中获取一个随机的女性名字。 最后,将获取到的随机女性名字返回给调用者,这样就完成了Java随机生成女性名字的过程。 以下是一个示例代码: ```java import java.util.Random; public class RandomFemaleNameGenerator { public static void main(String[] args) { String[] femaleNames = {"小芳", "晓霞", "丽娜", "婷婷", "丹丹"}; String randomFemaleName = generateRandomFemaleName(femaleNames); System.out.println("随机生成的女性名字是:" + randomFemaleName); } public static String generateRandomFemaleName(String[] femaleNames) { Random random = new Random(); int randomIndex = random.nextInt(femaleNames.length); return femaleNames[randomIndex]; } } ``` 当我们执行这段代码时,它将随机选择一个女性名字并打印出来。你可以根据需要修改femaleNames数组中的名字或者在调用generateRandomFemaleName方法时传入不同的女性名字数组来生成不同的女性名字

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值