目前比较全面且实用的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

实现功能

  1. 完全按照百家姓的排名顺序进行随机生成,排名考前的生成概率是后一个的N倍,且N可以自定义;
  2. 包含300个单姓及82个复姓,合计382个中文姓氏;
  3. 支持生成名字中男女比例的设置;
  4. 支持男女名字的单独逻辑生成,避免名字与性别不符;
  5. 支持生成名字中单字名字与双字名字的比例设置(单姓及复姓同时根据男女比例进行分配);
  6. 支持中文拼音;
  7. 支持输出姓氏在百家姓的排名顺序
  8. 支持生成规则的设置,目前支持如下五种生成规则:
    • 常用男女名称字符大全
    • 常用男女名称大全
    • 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中文名称批量生成器相关推荐

  1. java中文名称是什么_Java的中文意思是什么?

    展开全部 Java名词解释e69da5e6ba903231313335323631343130323136353331333231383336 Abstract class 抽象类:抽象类是不允许实例 ...

  2. java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**

    原文出处:http://cmsblogs.com/?p=1412 在上篇博文(java中文乱码解决之道(一)-–认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述 ...

  3. cmd运行Java中文乱码,无法加载主类Error: Could not find or load main class

    网上说了好多方法,只说我用了的 cmd运行Java中文乱码 设置环境变量--系统环境变量 添加条目:JAVA_TOOL_OPTIONS 值:-Dfile.encoding=UTF-8 -Duser.l ...

  4. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  5. J2EE (六) 详解 java 中文乱码

    简介 在Java项目的开发过程中,经常会出现中文乱码的情况,这也是一直是困扰大家的一个问题,很多的程序员都会经常遇到这个问题. 有时捣鼓调试半天也摸不着头绪,不知道究竟哪里出了问题,那是你还不清楚出现 ...

  6. java 中文及特殊字符校验

    java 中文及特殊字符校验 CreateTime--2017年8月25日16:54:50 Author:Marydon 一.参考链接 http://blog.csdn.net/imduan/arti ...

  7. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

  8. java 中文字符和unicode编码值相互转化

    java 中文字符和unicode编码值相互转化 https://blog.csdn.net/u011366045/article/details/79235217 版权声明:本文为博主原创文章,未经 ...

  9. 分析java中文乱码的原因

    在java开发中都能遇到java中文乱码的情况,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?希望通过下面的总结的java中文乱码解决方法对遇到过此类问题的朋友有所帮助. 首先,要想解决j ...

最新文章

  1. C++ lambda表达式
  2. java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出...
  3. json 取值判断_【收藏级】.NETCore3.1中的Json互操作解读
  4. 第五章 条件、循环及其他语句
  5. 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
  6. 驱动中的资源共享和临界代码保护
  7. 483. Smallest Good Base
  8. CString和string的互相转换
  9. UIScrollView setContentOffset: animated:YES 偶尔卡顿解决方案
  10. kali linux 添加字体,在kali linux之下安装wps之后 报错字体缺失
  11. Excel 高阶学习视频收藏
  12. 内向交货单MIGO过账模板
  13. 指数加权平均与动量梯度下降法
  14. ESP32实践FreeRTOS
  15. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题
  16. 阿里云ECS服务器搭建Mysql数据库
  17. 仿Mac程序坞放大动画
  18. 布斯(Booth)乘法
  19. Surface Pro 4安装Ubuntu
  20. ESP8266WiFi-begin调用储存在ESP8266的闪存系统中的WiFi设置

热门文章

  1. 企业网站自动生成系统的设计和实现
  2. ViewPage禁止滑动原理解析
  3. java画蝴蝶_怎样用java语言编写蝴蝶结
  4. 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 使用Docker Compose编排Spring Cloud微服务
  5. 语音信号处理入门系列(1)—— 语音信号处理概念
  6. ies4linux 本地安装,在Ubuntu Linux下安装ies4linux使用网银
  7. Python自动化办公社区 · 最新教程
  8. SolidWorks综合教程
  9. php apache日志,Apache日志详解
  10. Vue粒子特效(vue-particles插件)