一、概述
pinyin4j 是一个开源的流行java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制使用来处理中文转换成拼音(汉语拼音,罗马拼音等),功能非常强大。
官网地址: http://pinyin4j.sourceforge.net/
在线文档: http://pinyin4j.sourceforge.net/pinyin4j-doc/
二、主要功能
- 支持同一汉字有多个发音
- 支持拼音的格式化输出,比如第几声之类的
- 支持简体中文、繁体中文转换为拼音
三、代码示例
1.依赖配置
<!-- 导入pinyin4j -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
2.常用的几个类
net.sourceforge.pinyin4j.PinyinHelper;
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
PinyinHelper:提供了几个实用程序函数,用于将中文字符(简体和繁体)转换为各种中文罗马化表示。
HanyuPinyinOutputFormat:这个类定义了如何输出汉语拼音。
HanyuPinyinCaseType:为汉语拼音字符串的输出案例提供了几种选项。
HanyuPinyinToneType:该类提供了几种输出中文音调的选项。
HanyuPinyinVCharType:这个类为’ü’的输出提供了几个选项。
3.转换代码示例
// 编写utils类,供转换时直接调用
class Pinyin4jUtils {
/**
* 分别获取中文汉字的第一个首字母
*
* @param hanyu
* @return
*/
public static String getFirstPinYin(String hanyu) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
StringBuilder firstPinyin = new StringBuilder();
char[] hanyuArr = hanyu.trim().toCharArray();
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);
firstPinyin.append(pys[0].charAt(0));
} else {
firstPinyin.append(hanyuArr[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
return firstPinyin.toString();
}
/**
* 将中文汉字转为全拼音,并设置相关属性
* @param hanzi
* @return
*/
public static String getAllPinyin(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();
StringBuilder pinYin = new StringBuilder();
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);
pinYin.append(pys[0]).append(" ");
} else {
pinYin.append(hanYuArr[i]).append(" ");
}
}
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
return pinYin.toString();
}
}
调用示例:
public class Pinyin4jDemo {
public static void main(String[] args) {
String str = "中国共产党万岁";
System.out.println("获取首字母:"+Pinyin4jUtils.getFirstPinYin(str));
System.out.println("获取全拼音:"+Pinyin4jUtils.getAllPinyin(str));
}
}
运行结果:
获取首字母:ZGGCDWS
获取全拼音:zhōng guó gòng chăn dăng wàn suì