Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,这时候Pinyin4j就可以派上用场
Pinyin4j支持方式:
1.支持简体中文和繁体中文字符
2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼 法和国语罗马字
3.支持多音字,即可以获取一个中文字符的多种发音
4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 “ˉ”,阳平"ˊ",上声"ˇ",去声"ˋ")的输出
Pinyin4j支持多种格式:
全部大小YHY
全部大写(中间加字符串*)
全部小写
全部小写(中间加字符串*)
返回首字母大写Y
返回首字母小写y
引入依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
package com.jsq.myspringboot.javaee;
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;
public class TestPinyin4j {
public static void main(String[] args) {
String hanzi="夫好绿人参";
String[][] pinyin=hanziToPinyinArr(hanzi);
for(int i=0;i<pinyin.length;i++){
for (int j=0;j<pinyin[i].length;j++){
System.out.print(pinyin[i][j]+",");
}
System.out.println(" ");
}
}
public static String[][] hanziToPinyinArr(String hanzi){
//输出格式设置
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
/**
* 输出大小写设置
*
* LOWERCASE:输出小写
* UPPERCASE:输出大写
*/
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
/**
* 输出音标设置
*
* WITH_TONE_MARK:直接用音标符(必须设置WITH_U_UNICODE,否则会抛出异常)
* WITH_TONE_NUMBER:1-4数字表示音标
* WITHOUT_TONE:没有音标
*/
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
/**
* 特殊音标ü设置
*
* WITH_V:用v表示ü
* WITH_U_AND_COLON:用"u:"表示ü
* WITH_U_UNICODE:直接用ü
*/
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
char[] hanYuArr = hanzi.trim().toCharArray();
String[][] pinYin = new String[hanYuArr.length][];
try {
for (int i = 0, len = hanYuArr.length; i < len; i++) {
//匹配是否是汉字
if (Character.toString(hanYuArr[i]).matches("[\\u4E00-\\u9FA5]+")) {
//如果是多音字,返回多个拼音
String[] pys = PinyinHelper.toHanyuPinyinStringArray(hanYuArr[i], format);
// String[] pys = PinyinHelper.toGwoyeuRomatzyhStringArray(hanYuArr[i]);
// String[] pys = PinyinHelper.toGwoyeuRomatzyhStringArray(hanYuArr[i]);
pinYin[i]=pys;
} else {
pinYin[i]=new String[0];
}
}
} catch (Exception e){
e.printStackTrace();
}
// catch ( BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
// badHanyuPinyinOutputFormatCombination.printStackTrace();
// }
return pinYin;
}
}