一、引入依赖
<!-- 将中文转换为拼音 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
二、代码
/**
* 获取中文全拼
*
* @param name 需要转换的中文
* @return 全拼结果
**/
public static String getFullPinyin(String name) {
// 创建格式化对象
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
//设置大小写格式
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//设置声调格式
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
// 放置输入结果
StringBuilder result = new StringBuilder();
// 字符数组
char[] charArray = name.toCharArray();
// 遍历字符
for (char c : charArray) {
// 中文会被变成全拼,非中文会被直接拼接在结果字符串中
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] pinyinArray = new String[0];
try {
pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
if (pinyinArray != null) {
result.append(pinyinArray[0]);
}
} else {
result.append(c);
}
}
return result.toString();
}
/**
* 获取中文首字母
*
* @param name 需要转换的中文
* @return 首字母结果
**/
public static String getPinyinInitial(String name) {
// 创建格式化对象
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
//设置大小写格式
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//设置声调格式
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
// 放置输入结果
StringBuilder result = new StringBuilder();
// 字符数组
char[] charArray = name.toCharArray();
// 遍历字符
for (char c : charArray) {
// 中文会被变成拼音首字母,非中文会被直接拼接在结果字符串中
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] pinyinArray = new String[0];
try {
pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
if (pinyinArray != null) {
result.append(pinyinArray[0].charAt(0));
}
} else {
result.append(c);
}
}
return result.toString();
}
三、解释
1、创建格式化对象HanyuPinyinOutputFormat
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
2、设置输出结果的大小写格式
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
括号中的参数有两个选择项,分别是:HanyuPinyinCaseType.LOWERCASE
( 转换后以小写方式输出)、HanyuPinyinCaseType.UPPERCASE
(转换后以大写方式输出)
3、设置声调格式
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
括号中的参数有三个选择项,分别是:HanyuPinyinToneType.WITHOUT_TONE
(无声调表示,例如:liu)、HanyuPinyinToneType.WITH_TONE_NUMBER
(用数字表示声调,例如:liu2)、HanyuPinyinToneType.WITH_TONE_MARK
(用声调符号表示,例如:liú)
如果选择
HanyuPinyinToneType.WITH_TONE_MARK
(用声调符号表示,例如:liú)抓中方式展示,还可以对展示值做进一步的设置,例如:
outputFormat.setVCharType(HanyuPinyinVCharType);
括号中的参数可以有三个选择项,分别是:HanyuPinyinVCharType.WITH_U_UNICODE
(以拼音格式表示,例如:以ü表示)、HanyuPinyinVCharType.WITH_U_AND_COLON
(以U和一个冒号表示该拼音,例如:lu:)、HanyuPinyinVCharType.WITH_V
(以V表示该字符,例如:lv)
4、进行汉字转拼音操作
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
数组中只有第一个元素有值,所以只用取出下标为0的结果,记得处理抛出的异常
四、作用
上述两个功能在即时通讯产品中应用比较广泛,比如微信就是一个很好的例子,你可以尝试使用全拼或者首字母组合去微信搜索框中搜索,你会发现你能找到想要的结果,我猜测在用户注册的时候,微信会将用户名称、用户名称全拼、用户名称首字母拼写都存入了数据库或者搜索引擎中