在开发一个姓名检索功能的时候

没有使用之前查找到的前端Layui-select 下拉框实现拼音全拼匹配/首字母模糊搜索

在数据库中增加了首字母和全拼的内容实现输入首字母/拼音来检索人员

所以需要用到人员姓名转换首字母和pinyin

接着便介绍一个工具类 pinyin4j.jar

Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源项目。

com.belerweb

pinyin4j

2.5.1

可以下载jar包使用,可以引入pom

根据自己需求来使用即可

1.首先在检索的时候因为库中都是小写

所以需要判断传入的是否是字母然后转小写

/**

* 判断是否是字母

* @param str 传入字符串

* @return 是字母返回true,否则返回false

*/

public boolean is_alpha(String str) {

if(str==null) return false;

return str.matches("[a-zA-Z]+");

}

/**

* 判断是否是字母或者数字

* @param str 传入字符串

* @return 是字母返回true,否则返回false

*/

public static boolean isLetterDigit(String str) {

String regex = "^[a-z0-9A-Z]+$";

return str.matches(regex);

}

转小写的方法也很简单

System.out.println("aaaAAABBB".toLowerCase());//转小写

System.out.println("aaaAAABBB".toUpperCase());//转大写

输出结果

2.在插入用户的时候就需要用到咱们引入的pinyin包了

在这里给大家提供一个工具类

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import net.sourceforge.pinyin4j.PinyinHelper;

import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;

import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;

import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;

import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;

import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**

* 字符串转换为拼音工具类

* @author lzb

*/

public class PinyinUtils {

/**

* 获得汉语拼音首字母

*

* @param chines

* 汉字

* @return

*/

public static String getAlpha(String chines) {

chines = cleanChar(chines);

String pinyinName = "";

char[] nameChar = chines.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

for (int i = 0; i < nameChar.length; i++) {

if (nameChar[i] > 128) {

try {

pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

pinyinName += nameChar[i];

}

}

return pinyinName;

}

/**

* 将字符串中的中文转化为拼音,英文字符不变

*

* @param inputString

* 汉字

* @return

*/

public static String getPingYin(String inputString) {

inputString = cleanChar(inputString);

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();

format.setCaseType(HanyuPinyinCaseType.LOWERCASE);

format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

format.setVCharType(HanyuPinyinVCharType.WITH_V);

String output = "";

if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) {

char[] input = inputString.trim().toCharArray();

try {

for (int i = 0; i < input.length; i++) {

if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {

String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);

output += temp[0];

} else

output += java.lang.Character.toString(input[i]);

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

return "*";

}

return output;

}

/**

* 汉字转换位汉语拼音首字母,英文字符不变

*

* @param chines

* 汉字

* @return 拼音

*/

public static String converterToFirstSpell(String chines) {

chines = cleanChar(chines);

String pinyinName = "";

char[] nameChar = chines.toCharArray();

HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);

defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

for (int i = 0; i < nameChar.length; i++) {

if (nameChar[i] > 128) {

try {

pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

} else {

pinyinName += nameChar[i];

}

}

return pinyinName;

}

/**

* 清理特殊字符以便得到

* @param chines

* @return

*/

public static String cleanChar(String chines) {

chines = chines.replaceAll("[\\p{Punct}\\p{Space}]+", ""); // 正则去掉所有字符操作

// 正则表达式去掉所有中文的特殊符号

String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}<>《》【】‘;:”“’。,、?]";

Pattern pattern = Pattern.compile(regEx);

Matcher matcher = pattern.matcher(chines);

chines = matcher.replaceAll("").trim();

return chines;

}

}

然后直接使用其中的方法进行取首字母/拼音就可以了

有问题欢迎留言!

java首字母判断星期几_Java 获取汉字串首字母并大写和获取汉字的全拼(英文字符不变) 判断字符串是否为字母...相关推荐

  1. java根据时间判断星期几_java怎么根据日期判断是星期几

    java怎么根据日期判断是星期几 发布时间:2020-06-23 09:31:18 来源:亿速云 阅读:112 作者:Leah 这篇文章将为大家详细讲解有关java怎么根据日期判断是星期几,小编觉得挺 ...

  2. java 由日期计算星期几_java计算日期是星期几

    java取得指定日期是星期几:(推荐:java视频教程) 取得指定日期是星期几可以采用下面两种方式取得日期是星期几: 1..使用Calendar类//根据日期取得星期几 public static S ...

  3. android 查找联系人方法(支持首拼,全拼,英文)

    //google源码:public Cursor searchContact(Context ctxt, CharSequence constraint) { Uri uri = Uri.withAp ...

  4. 字符串的处理:判断字符是否全为中文,判断是否含有中文字符,判断是否全为英文字符,判断是否含有英文字符,取出其中的中文字符,取出其中的英文字符

    public class QimoSendMessageTest { @Test     public void sendMessageTest22() {         String[] strA ...

  5. vba 全拼_[求助]如何把中文名字转换为拼音(全拼、首字母)

    你的位置: 问答吧 -> excel -> 问题详情 [求助]如何把中文名字转换为拼音(全拼.首字母) 现需要把中文名字的拼音做企业邮箱的名字,姓用全拼,名用首字母,比如刘翔为liux,应 ...

  6. java 拼音转汉字_用Java转化汉字为拼音全拼

    /** * @(#)CnToSpell.java * 版权声明 Easydozer 版权所有 违者必究 * * 修订记录: * 1)更改者:Easydozer *   时 间:2004-10-20 * ...

  7. 每天一练——输入一行字符串,按如下规则加密:如果是英文字母则大写变小写、小写变大写,对非英文字符则保持不变。试写加密程序。

    目录 1.思路 2.代码 3.代码实现 1.思路 题目说道如果是英文字母: 大写要变小写 小写要变大写 对非英文字符则保持不变 这里就用到了ASCII码表 大写字母的ASCII码表是:65'A'--9 ...

  8. java怎么获取中文首字母_Java如何获取中文拼音首字母的方法介绍

    下面小编就为大家带来一篇java获取中文拼音首字母的实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 如下所示: import net.sourceforge.pin ...

  9. java 拼音首字母_java获取中文拼音首字母的实例

    导读热词 正文 如下所示: import net.sourceforge.pinyin4j.PinyinHelper; public class PinyinHelperUtil { /** * 得到 ...

最新文章

  1. 网络推广方法教大家提升网站页面收录的技巧!
  2. 少年郎,你需要封装好的ViewPager工具类
  3. android 提示文字,EditText 不能显示提示文字Hint
  4. IE6 下图片少一块
  5. 某个元素的距离页面的左边距_在机检测圆心距
  6. python有多少种模块_python如何查看有哪些模块
  7. 高性能平台设计—美团旅行结算平台实践
  8. mac brew install nginx遇到的坑
  9. java非检查性异常有哪些_Java异常处理-检查性异常、非检查性异常、Error
  10. 解读clickhouse存算分离在华为云实践
  11. No modules named ‘tensorflow.compat.v2‘
  12. LINUX下的LVM逻辑卷管理器
  13. PhpStorm无法获取Post数据 配置
  14. FPGA:生成占空比可调的PWM波
  15. 玩苹果为什么要越狱?
  16. 地理位置数据存储方案——Redis GEO
  17. 2022Java后端学习主流知识学习系列(建议先收藏)
  18. 考试系统mysql数据库设计_《在线考试系统数据库设计与实现》.doc
  19. 论文阅读:Oriented RepPoints for Aerial Object Detection (CVPR 2022)
  20. 寒冬降临程序猿们如何过冬

热门文章

  1. AP侧,BP侧如何理解?
  2. 明风社软件为什么适合学生
  3. 产品结构设计的主要内容有哪些?
  4. fusion 谷歌空间_Google Fusion Tables的用例
  5. 如何把JAR发布到maven中央仓库
  6. 给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
  7. 【腾讯开放平台】Android、IOS实现指定QQ临时会话功能
  8. detecting text in natural image with connectionist text proposal network
  9. 中国GMP级细胞因子市场现状及未来发展趋势
  10. 返利软件哪个佣金高,最高的是哪个