优点
自动处理方便开发
缺点
不识别多音字
导入依赖
<!-- 转拼音 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
废话少说 看结果|
public static void main(String[] args) {
String str = "广州天河";
System.out.println("获取首字母:"+getFirstPinYin(str));
System.out.println("获取全拼音:"+getAllPinyin(str));
}
获取首字母:GZTH
获取全拼音:guang zhou tian he
核心代码
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 LanguageUtils {
/**
* 分别获取中文汉字的第一个首字母
*
* @param hanyu
* @return
*/
public static String getFirstPinYin(String hanyu) {
if (hanyu == null || hanyu.isEmpty()){
return "";
}
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.WITHOUT_TONE);
/**
* 特殊音标ü设置
* WITH_V:用v表示ü
* WITH_U_AND_COLON:用"u:"表示ü
* WITH_U_UNICODE:直接用ü
*/
format.setVCharType(HanyuPinyinVCharType.WITH_V);
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 static void main(String[] args) {
String str = "广州天河";
System.out.println("获取首字母:"+getFirstPinYin(str));
System.out.println("获取全拼音:"+getAllPinyin(str));
}
}
注意!!!! 有坑 明明是 pan yu qu 变成了 fan yun qu 所以多音字得特殊处理了