Java中文姓名拆分
Java中文姓名拆分
实现逻辑比较简单,就是通过姓氏匹配来完成。优先匹配复姓,不满足是均按照单姓处理。这样处理依旧会存在问题,复姓姓氏不全、少数民族特殊姓氏没有匹配上的话都会按照单姓处理,所以还是需要不断完善。
import java.util.*;/*** @author : ZhiPengyu* @ClassName : [NameUtil]* @Description : [处理中文姓名相关]* @CreateDate : [2021/10/20 16:31]*/
public class NameUtils {/*** 复姓(两字),国内现存81个。末尾添加三字以上的部分满姓*/private static final String[] SURNAME_NOW = {"欧阳","太史","端木","上官","司马","东方","独孤","南宫","万俟","闻人","夏侯","诸葛","尉迟","公羊","赫连","澹台","皇甫","宗政","濮阳","公冶","太叔","申屠","公孙","慕容","仲孙","钟离","长孙","宇文","司徒","鲜于","司空","闾丘","子车","亓官","司寇","巫马","公西","颛孙","壤驷","公良","漆雕","乐正","宰父","谷梁","拓跋","夹谷","轩辕","令狐","段干","百里","呼延","东郭","南门","羊舌","微生","公户","公玉","公仪","梁丘","公仲","公上","公门","公山","公坚","左丘","公伯","西门","公祖","第五","公乘","贯丘","公皙","南荣","东里","东宫","仲长","子书","子桑","即墨","达奚","褚师","萨嘛喇","赫舍里","萨克达","钮祜禄","他塔喇","喜塔腊","库雅喇","瓜尔佳","舒穆禄","索绰络","叶赫那拉","依尔觉罗","额尔德特","讷殷富察","叶赫那兰","爱新觉罗","依尔根觉罗"};/*** 获取复姓,非单字姓氏。未匹配上则依旧返回单字姓氏* @param name* @return*/public static String getSurNameComplex(String name){for(int i = 0;i < SURNAME_NOW.length;i++) {if(name.startsWith(SURNAME_NOW[i])) {return name.substring(0,SURNAME_NOW[i].length());}}return name.substring(0,1);}/*** 获取复姓名,去除姓氏后名* @param name* @return*/public static String getNameComplex(String name){for(int i = 0;i < SURNAME_NOW.length;i++) {if(name.startsWith(SURNAME_NOW[i])) {return name.substring(SURNAME_NOW[i].length());}}return name.substring(1);}/*** 获取姓氏与姓名<br>* 姓名在两字时,首字为姓。<br>* 姓名大于两字时,优先匹配复姓。<br>* 姓氏未匹配且姓名多于5字时,姓与名均在姓氏中,名为空;少于5字时则采用第一个字为姓。<br>* @param name 姓名* @return map类型数据,姓氏为key值“X”,名字为value值“M”*/public static Map<String,Object> getSurName(String name) {Map<String,Object> mapData = new HashMap<>();if (name.length() > 0 && name.length() <= 2){mapData.put("X",name.substring(0,1));mapData.put("M",name.substring(1));} else if (name.length() > 2) {// Arrays.asList(SURNAME).contains("")for(int i=0;i<SURNAME_NOW.length;i++) {//遍历复姓数组if (name.startsWith(SURNAME_NOW[i])){mapData.put("X",SURNAME_NOW[i]);mapData.put("M",name.substring(SURNAME_NOW[i].length()));return mapData;}}//姓氏没有匹配时,姓名多于5字符,姓与名均在姓氏中,否则采用第一个字为姓mapData.put("X",name.length() >= 5 ? name : name.substring(0,1));mapData.put("M",name.length() >= 5 ? "" : name.substring(1));}return mapData;}private NameUtils() {}
}
Java中文姓名拆分相关推荐
- java中文姓名排序pinyin4j-2.5.0,pinyin4j工具类--Java 中文字符操作:排序、拼音
直接上代码吧!将汉子转化为拼音,用到"pinyin4j-2.5.0.jar". 1.ChinaWord.java : 汉子排序 /** * @包名 :com.andy.汉字排序 * ...
- java 日期随机数_Java 生成指定时间范围的随机时间、随机中文姓名、随机字符姓名、随机数...
解决问题: Java生成指定时间范围的随机时间? Java生成随机中文姓名? Java生成随机字符姓名? Java生成随机数? 代码: import java.io.UnsupportedEncodi ...
- Java随机生成中文姓名+手机+邮编+地址
import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @author X-rapido */ ...
- java校验中文姓名合法性(需要支持生僻字与分隔符·)
背景: 国家民委等单位关于在政府管理和社会公共服务信息系统中统一姓名采集应用规范的通知 对中文姓名合法性校验时,需要支持所有GB18030中涉及到的汉字(包括生僻字),并支持部分少数民族姓名中带有分隔 ...
- java随机生成中文昵称_Java 中文姓名随机生成
项目要求产生一些模拟的中文姓名,我的想法是先产生姓氏,再随机产生名字,可以是两个字的也可以是三个字的.使用的是 GB2312实现的中文字,可自行百度"信息交换用汉字编码字符集"了解 ...
- Java开源 之随机生成中文姓名,手机号,邮编,住址
import java.util.HashMap; import java.util.Map;/*** 随机生成中文姓名,性别,Email,手机号,住址*/ public class RandomVa ...
- java中文分词的简单实现
java中文分词的简单实现 中文分词 算法 算法思路 算法实现 代码及注释 评价 结语 中文分词 通俗来讲,中文分词是指将一句中文句子中的所有中文词汇相互分隔开来.它是文本挖掘的基础,有着十分广阔的应 ...
- Java 中文 Unicode 编码转换
Java作为支持多平台的高级程序设计语言自然要支持多种编码方式才能满足程序设计的需要.但是在处理中文&其他编码之间的转换问题时往往出现各种问题,另程序员大伤脑筋.本文着重阐述了Java中文与U ...
- java 合并和拆分单元格_如何轻松合并和拆分电子书
java 合并和拆分单元格 Whether you want to merge collections of short stories into a DIY anthology, or you wa ...
- 将MySQL中的中文姓名转为拼音
一.首先设计好数据库表对应的实体类: Paper类: public class Paper {private String name; //论文题目private String firstAuthor ...
最新文章
- 图森无人车官宣D轮2.15亿美元融资,成卡车货运估值No.1
- linux sort 命令详解(转 )
- Google Spanner:谷歌的全球分布式数据库
- 精通php7,PHP 7从入门到精通
- 用数组建立二叉树(LeetCode二叉树测试)
- OpenGL基础8:SOIL库
- jupyter查看函数参数
- 谈谈EOS的出块时间,不可逆时间,BFT
- 2019主流浏览器市场占有率及其内核
- PXE网络安装linux系统
- 北航计算机控制系统实验报告,北航计算机控制系统实验报告教程.doc
- golang pederson commitment 实现,基于椭圆曲线
- 联想台式机无法从U盘启动的解决方案
- including用法
- PID微分积分电路(转载)
- 如何在局域网下建立共享文件夹?
- 什么鬼,Kubelet 重启之后容器也跟着重启了?
- linux内核cpu负载计算,Load和CPU利用率是如何算出来的
- 半导体工艺1:课程和书籍
- join on 后跟or有什么用_如果在ON子句中使用OR,MySQL将不会在JOIN中使用可用索引