W3Schools Learner's Blog

W3Schools Programming knowledge summary website

div

7/06/2019

汉字转拼音pinyin4j功能的java实现示例

java汉字转拼音功能实现需要使用pinyin4j(pinyin for java)框架,使用也非常的简单,首先我们需要引入pinyin4j-2.5.0.jar包,或者直接引入pinyin4j maven,如下:
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.0</version>
</dependency>
使用pinyin4j将汉字转换为拼音也非常的简单,示例如下。
String hanzi = "我是中国人,重新崛起!";
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
// UPPERCASE:大写  (ZHONG)
// LOWERCASE:小写  (zhong) 

format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// WITHOUT_TONE:无音标(zhong)  
// WITH_TONE_NUMBER:1-4数字表示英标的4个声调(zhong1)  
// WITH_TONE_MARK:如果用音标符(必须WITH_U_UNICODE否则会报异常)(zhōng)
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

// WITH_V:用v表示ü  (nv)  
// WITH_U_AND_COLON:用"u:"表示ü  (nu:)  
// WITH_U_UNICODE:直接用ü (nü)  
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

//参数1:需要转换的中文字符串
//参数2:转换规则
//参数3:用符号分隔,这里是空格符号
String hanyuPinyinString = PinyinHelper.toHanyuPinyinString(hanzi, format, " ");
System.out.println(hanyuPinyinString);
上面的示例将输出如下结果:“wŏ shì zhōng guó rén ,zhòng xīn jué qĭ !”,但是我们发现又错误了,比如“重新做人”被翻译成了“zhòng xīn jué qĭ”,这是因为我们使用toHanyuPinyinString()这个方法将一个中文句子转化为拼音,它是无法识别多音字的。
因此我们可能需要将中文句子拆分成多个字符,一个一个的转换成拼音,然后用String[]字符串数组来接收,并进行拼接,这样才可以不出错,例如汉字转拼音:
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray("重");
这个多音字会返回字符串数组结果,然后进行筛选即可。
"zhòng"
"chóng"
toHanyuPinyinString()方法已经过时,官方推荐将中文字符串拆分成单个字符来一个个的转换,这样才可以避免多音字造成的困扰。
代码中说到使用音标符如果不使用WITH_TONE_MARK常量的话,就会报如下错误:
net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination: tone marks cannot be added to v or u:

No comments:

Post a Comment

Note: only a member of this blog may post a comment.