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

完~

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值