介绍
在客户管理系统中部分客户的名字会有生僻字为了沟通时候不叫错客户的名称,因此决定将客户名称的拼音一起返回给前端,也可以直接交给前端去处理。这里介绍后端的做法
Pinyin4j 是一个用于将汉字转换为拼音的 Java 库。在需要对中文文本进行拼音转换、拼音排序、拼音检索等功能。
依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
工具类
public class PinYinUtils {
/**
* 将中文转换为拼音
*
* @param chinese 中文字符串
* @return 拼音字符串
*/
public static String toPinyin(String chinese) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
/**setVCharType: 设置拼音中“ü”的输出方式。
* HanyuPinyinVCharType.WITH_U_AND_COLON: 输出为“u:”(例如“ü”变成“u:”)
* HanyuPinyinVCharType.WITH_V: 输出为“v”(例如“ü”变成“v”)
* HanyuPinyinVCharType.WITH_U_UNICODE: 输出为“ü”字符(例如“ü”保持不变)
* */
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
/**setToneType: 设置声调的类型,常见的类型有:
* HanyuPinyinToneType.WITH_TONE_MARK: 带声调标记(例如“pī”)
* HanyuPinyinToneType.WITHOUT_TONE: 不带声调(例如“pi”)
* HanyuPinyinToneType.WITH_TONE_NUMBER: 使用数字表示声调(例如“pi1”)
* */
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
/***
* HanyuPinyinCaseType.UPPERCASE: 大写字母
* HanyuPinyinCaseType.LOWERCASE: 小写字母
*/
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
StringBuilder pinyin = new StringBuilder();
for (char c : chinese.toCharArray()) {
/***
* ^[\u2E80-\u9FFF]+$ 匹配所有东亚区的语言
* ^[\u4E00-\u9FFF]+$ 匹配简体和繁体
* ^[\u4E00-\u9FA5]+$ 匹配简体
*/
if (Character.toString(c).matches("[\\u4E00-\\u9FFF]")) { // 判断是否为中文
try {
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
if (pinyinArray != null && pinyinArray.length > 0) {
pinyin.append(pinyinArray[0]).append(" ");;
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pinyin.append(c);
}
}
return pinyin.toString();
}
}
使用
System.out.println(PinYinUtils.toPinyin("马冬梅"));