一、定义
pinyin4j库是一个将汉字转换为拼音(汉语拼音,罗马拼音等)的流行开源java类库,其中最常见的几个类有:
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:这个类为'ü'的输出提供了几个选项。
maven依赖:
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
二、使用PinyinHelper处理汉语拼音格式
方式一
static java.lang.String[] toHanyuPinyinStringArray(char ch) 方法将汉字转换成拼音,返回的是一个string字符串数组类型,即该汉字的所有读音。
方式二
static java.lang.String[] toHanyuPinyinStringArray(char ch, HanyuPinyinOutputFormat outputFormat) 方法将汉字转换成指定格式的拼音,返回的是一个string字符串数组类型,将该汉字的所有读音以指定的格式进行输出。
方式三
static java.lang.String toHanyuPinyinString(java.lang.String str, HanyuPinyinOutputFormat outputFormat, java.lang.String seperater) 方法将汉语按指定的格式和分隔符转换成拼音,遇到多音字时取第一个读音,返回指定间隔的拼音字符串。
三、创建HanyuPinyinOutputFormat对象处理拼音输出格式
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
该对象有以下几个方法设置格式:
1)设置拼音的大小写: setCaseType(HanyuPinyinCaseType caseType)方法
HanyuPinyinCaseType.UPPERCASE:设置为大写,如:刘->LIU2
HanyuPinyinCaseType.LOWERCASE:设置为小写,如:刘->liu2
2)设置ü的显示方式:setVCharType(HanyuPinyinVCharType charType)方法
HanyuPinyinVCharType.WITH_U_AND_COLON:显示为u:(默认)
HanyuPinyinVCharType.WITH_V :显示为v
HanyuPinyinVCharType.WITH_U_UNICODE:显示为ü
3)设置声调显示方式:setToneType(HanyuPinyinToneType toneType)方法
HanyuPinyinToneType.WITH_TONE_NUMBER:设置数字声调(默认) ,如:刘->liu2
HanyuPinyinToneType.WITHOUT_TONE:设置不显示声调,如:刘->liu
HanyuPinyinToneType.WITH_TONE_MARK:设置显示声调,前提必须设置V如何显示,如:刘-> liú
四、实例
package com.daze.pinyin;
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 Pinyin4jUtil {
private static String CHINESE_REGEX = "[\\u4E00-\\u9FA5]+";
/**
* @Description 获取全拼
* @param chinese 中文
* @return java.lang.String 全拼
*/
public static String getAllPinyin(String chinese) {
//输出格式设置
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 = chinese.trim().toCharArray();
StringBuilder pinYin = new StringBuilder();
try {
for (int i = 0, len = hanYuArr.length; i < len; i++) {
//匹配是否是汉字
if (Character.toString(hanYuArr[i]).matches(CHINESE_REGEX)) {
//如果是多音字,返回多个拼音,这里只取第一个
String[] pys = PinyinHelper.toHanyuPinyinStringArray(hanYuArr[i], format);
pinYin.append(pys[0]);
} else {
pinYin.append(hanYuArr[i]);
}
if(i < len - 1){
pinYin.append(" ");
}
}
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
return pinYin.toString();
}
/**
* @Description 获取首字母字
* @param chinese 中文
* @return java.lang.String
*/
public static String getFirstPinYin(String chinese) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
StringBuilder firstPinyin = new StringBuilder();
char[] hanyuArr = chinese.trim().toCharArray();
try {
for (int i = 0, len = hanyuArr.length; i < len; i++) {
if(Character.toString(hanyuArr[i]).matches(CHINESE_REGEX)){
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();
}
public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
String pinYin = getAllPinyin("中华人民共和国万岁");
String firstPinYin = getFirstPinYin("中华人民共和国万岁");
String pinYin2 = PinyinHelper.toHanyuPinyinString("中华人民共和国万岁",new HanyuPinyinOutputFormat()," ");
System.out.println("中华人民共和国万岁:"+pinYin);
System.out.println("中华人民共和国万岁:"+firstPinYin);
System.out.println("中华人民共和国万岁:"+pinYin2);
}
}