目前比较全面且实用的Java中文名称批量生成器
目前比较全面且实用的Java中文名称批量生成器
- 目前比较全面且实用的Java中文名称批量生成器
- 生成结果
- 实现功能
- 关键代码
- 通过等比数列实现百家姓常用姓氏的概率翻倍
目前比较全面且实用的Java中文名称批量生成器
生成结果
pinyin | surname | sex | isSingle | name | index |
---|---|---|---|---|---|
tán|wă|qīng | 覃 | GIRL | 覃琬卿 | 175 | |
wéi|yán | 文 | BOY | true | 文言 | 100 |
zhōng|jiān|shí | 钟 | BOY | 钟坚石 | 56 | |
xī|hŭ|qiān | 奚 | BOY | 奚虎千 | 227 | |
yuàn|hòu|chén | 苑 | BOY | 苑厚晨 | 212 | |
sī|tú|zhăn|miăo | 司徒 | BOY | 司徒展缈 | 328 | |
jī|ān|ruì | 姬 | BOY | 姬安瑞 | 236 | |
zuŏ|lùn|gù | 左 | BOY | 左论固 | 142 | |
fáng|tāo|gēng | 房 | BOY | 房韬耕 | 198 | |
zāng|yàng|qián | 臧 | BOY | 臧漾钱 | 214 |
实现功能
- 完全按照百家姓的排名顺序进行随机生成,排名考前的生成概率是后一个的N倍,且N可以自定义;
- 包含300个单姓及82个复姓,合计382个中文姓氏;
- 支持生成名字中男女比例的设置;
- 支持男女名字的单独逻辑生成,避免名字与性别不符;
- 支持生成名字中单字名字与双字名字的比例设置(单姓及复姓同时根据男女比例进行分配);
- 支持中文拼音;
- 支持输出姓氏在百家姓的排名顺序
- 支持生成规则的设置,目前支持如下五种生成规则:
- 常用男女名称字符大全
- 常用男女名称大全
- GB2312字符集中文汉字
- GBK字符集中文汉字
- UTF-8字符集中文汉字
关键代码
/*** @title 批量生成名字* @author liangxin* @param count 生成总数量1~10000之间* @param femaleRate 女性占比 0~100整数* @param singleRate 单名字占比 0~100整数* @param rule FIXED:固定组合 GROUP:常用字组合 GB2312:GB2312 GBK:GBK RANDOM:随机规则* @return* @throws BadHanyuPinyinOutputFormatCombination * @throws UnsupportedEncodingException */public static List<Map<String,Object>> batchGenName(int count,int femaleRate, int singleRate,String rule) throws BadHanyuPinyinOutputFormatCombination, UnsupportedEncodingException {List<Map<String,Object>> names = new ArrayList<Map<String,Object>>();//检验参数合法性count = count >=1 && count <= 10000?count:10;femaleRate = femaleRate >=0 && femaleRate <= 100?femaleRate:50;singleRate = singleRate >=0 && singleRate <= 100?singleRate:10;//循环生成String sex = "GIRL";Boolean isSingle = false;double rateTemp= 0D;double rateCompare = 0D;int singleCount = 0;int singleTotalCount = count*singleRate/100;int singleGirlCount = count*femaleRate*singleRate/10000;Map<String,Object> nameMap = new HashMap<String,Object>();for (int i = 0; i < count; i++) {Map<String,Object> map = new HashMap<String,Object>();rateTemp = (double)(i+1)/count;rateCompare = Math.round(rateTemp * 500); sex = rateCompare <= femaleRate?"GIRL":"BOY";if("GIRL".equals(sex)){if(singleCount< singleGirlCount) {isSingle = true;singleCount ++;}else {isSingle = false;}}else {if(singleCount < singleTotalCount) {isSingle = true;singleCount ++;}else {isSingle = false;}}nameMap = genName(sex,rule,isSingle);map.put("sex", sex);map.put("isSingle", isSingle);map.put("name", nameMap.get("name"));map.put("surname", nameMap.get("surname"));map.put("index", nameMap.get("index"));map.put("pinyin", ChinesePinyin.getChinesePinyin(""+nameMap.get("name")));names.add(map);}return names;}
通过等比数列实现百家姓常用姓氏的概率翻倍
public static int getRandomNumber(int n, int m) {// 权重数组,权重为前一个数的m倍//梁新说明:类似与数学中的等比递增数列,前一个是后m倍,概率就高出m倍,但是要确保最后一个数值必须大于倒数第二个数字加1,否则会出现更多重复且排名靠后的姓氏。int[] weights = new int[n];weights[0] = 1;for (int i = 1; i < n; i++) {weights[i] = weights[i-1] + m*(n-i);}
// System.out.println(JSONObject.toJSONString(weights));// 求和得到总权重 int totalWeight = 0;for (int weight : weights) {totalWeight += weight;}// 生成一个范围在1~totalWeight之间的随机数int randomWeight = new Random().nextInt(totalWeight) + 1; // 遍历权重数组,判断随机数落在哪个权重范围内int number = 0; int sum = 0;for (int i = 0; i < weights.length; i++) {sum += weights[i]; if (randomWeight <= sum) {number = i + 1;break;}}return number;}
目前比较全面且实用的Java中文名称批量生成器相关推荐
- java中文名称是什么_Java的中文意思是什么?
展开全部 Java名词解释e69da5e6ba903231313335323631343130323136353331333231383336 Abstract class 抽象类:抽象类是不允许实例 ...
- java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
原文出处:http://cmsblogs.com/?p=1412 在上篇博文(java中文乱码解决之道(一)-–认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述 ...
- cmd运行Java中文乱码,无法加载主类Error: Could not find or load main class
网上说了好多方法,只说我用了的 cmd运行Java中文乱码 设置环境变量--系统环境变量 添加条目:JAVA_TOOL_OPTIONS 值:-Dfile.encoding=UTF-8 -Duser.l ...
- java轻量级并行工具类_16 个超级实用的 Java 工具类
原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...
- J2EE (六) 详解 java 中文乱码
简介 在Java项目的开发过程中,经常会出现中文乱码的情况,这也是一直是困扰大家的一个问题,很多的程序员都会经常遇到这个问题. 有时捣鼓调试半天也摸不着头绪,不知道究竟哪里出了问题,那是你还不清楚出现 ...
- java 中文及特殊字符校验
java 中文及特殊字符校验 CreateTime--2017年8月25日16:54:50 Author:Marydon 一.参考链接 http://blog.csdn.net/imduan/arti ...
- java中文字符怎么保证出现正确_JAVA中文字符编码问题详解
JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...
- java 中文字符和unicode编码值相互转化
java 中文字符和unicode编码值相互转化 https://blog.csdn.net/u011366045/article/details/79235217 版权声明:本文为博主原创文章,未经 ...
- 分析java中文乱码的原因
在java开发中都能遇到java中文乱码的情况,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?希望通过下面的总结的java中文乱码解决方法对遇到过此类问题的朋友有所帮助. 首先,要想解决j ...
最新文章
- C++ lambda表达式
- java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出...
- json 取值判断_【收藏级】.NETCore3.1中的Json互操作解读
- 第五章 条件、循环及其他语句
- 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
- 驱动中的资源共享和临界代码保护
- 483. Smallest Good Base
- CString和string的互相转换
- UIScrollView setContentOffset: animated:YES 偶尔卡顿解决方案
- kali linux 添加字体,在kali linux之下安装wps之后 报错字体缺失
- Excel 高阶学习视频收藏
- 内向交货单MIGO过账模板
- 指数加权平均与动量梯度下降法
- ESP32实践FreeRTOS
- intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题
- 阿里云ECS服务器搭建Mysql数据库
- 仿Mac程序坞放大动画
- 布斯(Booth)乘法
- Surface Pro 4安装Ubuntu
- ESP8266WiFi-begin调用储存在ESP8266的闪存系统中的WiFi设置
热门文章
- 企业网站自动生成系统的设计和实现
- ViewPage禁止滑动原理解析
- java画蝴蝶_怎样用java语言编写蝴蝶结
- 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 使用Docker Compose编排Spring Cloud微服务
- 语音信号处理入门系列(1)—— 语音信号处理概念
- ies4linux 本地安装,在Ubuntu Linux下安装ies4linux使用网银
- Python自动化办公社区 · 最新教程
- SolidWorks综合教程
- php apache日志,Apache日志详解
- Vue粒子特效(vue-particles插件)