ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

给你娃取个名字很难?用Java来解决!

2021-06-11 21:03:51  阅读:239  来源: 互联网

标签:很难 String 取个 random 汉字 static new Java NAME


一、导论

本文主要通过Java 来随机生成一个中文名字,在写代码之前,首先要了解两个比较重要的知识点:

1. 中文名字的构成

下面来自百度百科的解释:中国人的姓名,是由汉字来组成,汉族人是用汉字进行取名,其他民族的姓名则音译为汉字表示,也有些为自己另取汉名。

总结:汉字名字 + 中文姓氏 = 中国人的姓名

2. Unicode 中的汉字

在Unicode 5.0 的99089 个字符中,有71226 个字符是与汉字有关的,而汉字的编码范围是在0x4E00 ~ 0x9FBB

二、代码实现

生成姓氏

这里直接使用中国的百家姓,通过random 随机生成一下【下标值】来挑选,由于篇幅关系,这里只列了几个,详细的可以自行搜索。

/** * 百家姓 */
private final static String[] LAST_NAME = {"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷",  "罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅"};

//获得一个随机的姓氏
Random random = new Random(System.currentTimeMillis());
int index = random.nextInt(LAST_NAME.length - 1);
String name = LAST_NAME[index];
复制代码

生成名字

这里的名字统一设置为由2 ~ 3 位的汉字组成,而汉字的生成是从Unicode 的编码范围中随机挑取。

private static String getChineseCharacter() {   
      int random = new Random().nextInt(0x9FBB - 0x4E00 + 1) + 0x4E00;    
      return new String(new char[]{(char) (random)});}
复制代码

完整代码

public class ChineseNameUtils {   
        /**    
         * 百家姓     
         */   
        private final static String[] LAST_NAME = {"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚"};    

        public static String getChineseName() {        
                //获得一个随机的姓氏        
                Random random = new Random(System.currentTimeMillis());        
                int index = random.nextInt(LAST_NAME.length - 1);        
                String name = LAST_NAME[index];        
                /* 从常用字中选取一个或两个字作为名 */       
                if (random.nextBoolean()) {            
                        name += getChineseCharacter() + 
                        getChineseCharacter();        
                } else {            
                        name += getChineseCharacter();       
                }        
                return name;    
        }    

        private static String getChineseCharacter() {        
                int random = new Random().nextInt(0x9FBB - 0x4E00 + 1) + 0x4E00;        
                return new String(new char[]{(char) (random)});    
        }    

        public static void main(String[] args) {       
                System.out.println(getChineseName());    
        }

}

复制代码

改进

由于从Unicode 随机挑取出来的汉字过于生僻,所以笔者直接从三字经中挑选汉字作为名字。 由于篇幅原因,所以只举例部分

private static final String NAME = "人之初性本善性相近习相远苟不教性乃迁教之道贵以专昔孟母择邻处子不学断机杼窦燕";

private static String getChineseCharacterFromBook() {    
        int random = new Random().nextInt(NAME.length());    
        return String.valueOf(NAME.charAt(random));
}

原文链接:https://juejin.cn/post/6972096604186607623

标签:很难,String,取个,random,汉字,static,new,Java,NAME
来源: https://blog.csdn.net/QLCZ0809/article/details/117826780

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有