前言
最近在开发中有一个功能是需要用到汉字转拼音的操作,上网了解了PinYin4J这个工具包,记录一下使用的过程
一、PinYin4J是什么?
PinYin4J是一个能够实现汉字转拼音的工具包,里面的方法能够轻松实现我们日常所需
二、使用步骤
1.引入库
<dependency>
<groupId>org.clojars.cbilson</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
2.使用
public String toPinyin(String chinese) {
//全拼
StringBuffer pinyinStr = new StringBuffer();
//首字母
StringBuffer pinyinFirstStr = new StringBuffer();
//转换为字符数组
char[] newChar = chinese.toCharArray();
//定义格式
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
//设置拼音转换大小写格式
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//设置声调转换方式
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//设置特殊拼音ü的显示格式:例如lv,设置以v进行显示
defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
String regex = "&";
for (char c : newChar) {
if (c > 128) {
try {
//获得单个汉字全部拼音(多音字)
String[] str = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat);
if (str != null) {
if (pinyinStr.length() <= 0) {
//初始化
for (int j = 0; j < str.length; j++) {
pinyinStr.append(str[j]);
pinyinFirstStr.append(str[j].charAt(0));
if (j != str.length - 1) {
pinyinStr.append(regex);
pinyinFirstStr.append(regex);
}
}
continue;
}
pinyinStr = getPinyin(str, pinyinStr, regex);
pinyinFirstStr = getFirstPinyin(str, pinyinFirstStr, regex);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pinyinStr.append(c);
pinyinFirstStr.append(c);
}
}
return pinyinStr + " " + pinyinFirstStr;
}
/**
* 获取汉字的首字母
*
* @param str 汉字拼音
* @param pinyinFirstStr 已经存在的首字母
* @param regex 分隔符
* @return 首字母
*/
private StringBuffer getFirstPinyin(String[] str, StringBuffer pinyinFirstStr, String regex) {
String[] firstPinyin = new String(pinyinFirstStr).toUpperCase().split(regex);
StringBuffer temp = new StringBuffer();
HashSet<String> set = new HashSet<>(Arrays.asList(firstPinyin));
Object[] objects = set.toArray();
for (int i = 0; i < objects.length; i++) {
for (int j = 0; j < str.length; j++) {
temp.append(objects[i]).append(str[j].charAt(0));
if (j != str.length - 1) {
temp.append(regex);
}
}
if (i != objects.length - 1) {
temp.append(regex);
}
}
pinyinFirstStr = temp;
return pinyinFirstStr;
}
/**
* 获取汉字组合的全拼
*
* @param str 汉字拼音
* @param pinyinStr 已经存在的全拼
* @param regex 分隔符
* @return 全拼
*/
private StringBuffer getPinyin(String[] str, StringBuffer pinyinStr, String regex) {
//单音字直接转换存储
StringBuffer temp = new StringBuffer();
String[] split = new String(pinyinStr).split(regex);
//单音字
if (str.length == 1) {
for (int j = 0; j < split.length; j++) {
temp.append(split[j]).append(str[0]);
if (j != split.length - 1) {
temp.append(regex);
}
}
} else {
//多音字
for (int j = 0; j < split.length; j++) {
for (int k = 0; k < str.length; k++) {
temp.append(split[j]).append(str[k]);
if (k != str.length - 1) {
temp.append(regex);
}
}
if (j != split.length - 1) {
temp.append(regex);
}
}
}
pinyinStr = temp;
return pinyinStr;
}
总结
随手记录的使用过程,如果有建议可以给我评论出来