依赖pinyin4j(pinyin for java)
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
使用示例
package com.yawn.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;
import static net.sourceforge.pinyin4j.format.HanyuPinyinCaseType.LOWERCASE;
import static net.sourceforge.pinyin4j.format.HanyuPinyinCaseType.UPPERCASE;
import static net.sourceforge.pinyin4j.format.HanyuPinyinToneType.WITHOUT_TONE;
import static net.sourceforge.pinyin4j.format.HanyuPinyinToneType.WITH_TONE_NUMBER;
import static net.sourceforge.pinyin4j.format.HanyuPinyinToneType.WITH_TONE_MARK;
import static net.sourceforge.pinyin4j.format.HanyuPinyinVCharType.WITH_U_AND_COLON;
import static net.sourceforge.pinyin4j.format.HanyuPinyinVCharType.WITH_V;
import static net.sourceforge.pinyin4j.format.HanyuPinyinVCharType.WITH_U_UNICODE;
/**
* @author yawn
* 2019/9/19 16:46
*/
public class Test {
public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
String str = "今天天气 真好!good! 率";
HanyuPinyinOutputFormat fmt = new HanyuPinyinOutputFormat();
String pinyin1 = PinyinHelper.toHanYuPinyinString(str, fmt, "", true);
System.out.println(pinyin1); // jin1tian1tian1qi4 zhen1hao3!good! lu:4
String pinyin2 = PinyinHelper.toHanYuPinyinString(str, fmt, "", false);
System.out.println(pinyin2); // jin1tian1tian1qi4zhen1hao3lu:4
String pinyin3 = PinyinHelper.toHanYuPinyinString(str, fmt, "-", true);
System.out.println(pinyin3); // jin1-tian1-tian1-qi4- zhen1-hao3-!good! lu:4
HanyuPinyinOutputFormat fmt2 = new HanyuPinyinOutputFormat();
fmt2.setCaseType(UPPERCASE);
fmt2.setToneType(WITHOUT_TONE);
fmt2.setVCharType(WITH_V);
String pinyin4 = PinyinHelper.toHanYuPinyinString(str, fmt2, " ", false);
System.out.println(pinyin4); // JIN TIAN TIAN QI ZHEN HAO LV
}
}
输出结果:
jin1tian1tian1qi4 zhen1hao3!good! lu:4
jin1tian1tian1qi4zhen1hao3lu:4
jin1-tian1-tian1-qi4- zhen1-hao3-!good! lu:4
JIN TIAN TIAN QI ZHEN HAO LV
PinyinHelper.toHanYuPinyinString方法说明
参数说明
str – 需要转换成拼音的中文汉字字符串
outputFormat – 转换的格式设置
separate – 转换后每个汉字拼音之间的分隔符
retain – 是否保留非中文汉字的字符
HanyuPinyinOutputFormat 拼音格式设置
HanyuPinyinOutputFormat 类可以设置拼音的格式,其中有三个属性:
- vCharType :对拼音 ü 的转换方式
- caseType :大小写的转换方式
- toneType :声调的转换方式
默认值如下:
public void restoreDefault() {
vCharType = HanyuPinyinVCharType.WITH_U_AND_COLON;
caseType = HanyuPinyinCaseType.LOWERCASE;
toneType = HanyuPinyinToneType.WITH_TONE_NUMBER;
}
vCharType :对拼音 ü 的转换方式
HanyuPinyinVCharType.WITH_U_AND_COLON; // 使用 u: 代替 HanyuPinyinVCharType.WITH_V; // 使用 v 代替 HanyuPinyinVCharType.WITH_U_UNICODE; // 使用 ü (字符不支持时会报错)
caseType :大小写的转换方式
HanyuPinyinCaseType.LOWERCASE; // 转换后问小写拼音 HanyuPinyinCaseType.UPPERCASE; // 转换后为大写拼音
toneType :声调的转换方式
HanyuPinyinToneType.WITHOUT_TONE; // 忽略拼音的声调 HanyuPinyinToneType.WITH_TONE_NUMBER; // 使用1234表示声调(轻声将被忽略) HanyuPinyinToneType.WITH_TONE_MARK; // 使用声调字符 ā á ǎ à (字符不支持时会报错)
建议做一个汉字转拼音的在线转换的工具