pinyin4j使用介绍

1.使用场景

pinyin4j是sourceforge.net上的一个开源项目,用来处理讲中文转换成拼音的场景,比如"博客"-->"boke"。

2.基本原理

    pinyin4j使用了一个.txt的文本文件用来存储汉字与拼音的对应关系,通过读取该配置文件达到转换的目的。

   该属性文件存储信息的基本格式如下:89E3 (jie3,jie4,xie4)   //(对应汉字"解")

    89E3 是汉字对应的unicode编码的16进制数,(jie3,jie4,xie4)是该汉字对应的三种读音(在汉语里有多音字),说明pinyin4j支持多音字的处理

    pinyin4j的处理过程是这样的:

根据String的codePointAt(int i)方法,得到"解"字的unicode编码[实际上是35299],然后将其转换成16进制数[也就是89E3],通过读取配置文件得到“解”字的拼音(jie3,jie4,xie4),那么这里有三个拼音,pinyin4j的默认取值为第一个,也就是jie3[表示读jie,声调是三声]

3.使用

    pinyin4j提供的工具类为PinyinHelper,里边提供了静态方法toHanyuPinyinString()和toHanyuPinyinStringArray(),由于这两个方法都涉及到一个HanyuPinyinOutputFormat类型的参数,我们先看一下pinyin4j中的辅助类。

    pinyin4j中有四个辅助类分别是:HanyuPinyinCaseType、HanyuPinyinToneType、HanyuPinyinVCharType、HanyuPinyinOutputFormat

    (1)HanyuPinyinCaseType类,提供了两个静态常量UPPERCASE和LOWERCASE,表示转换后的拼音为大写和小写

    (2)HanyuPinyinToneType类,提供了两个静态常量WITH_TONE_NUMBER和WITHOUT_TONE,表示转换后的拼音是否带声调,还拿汉字"解"说明,如果我们设置了HanyuPinyinToneType类型为WITH_TONE_NUMBER,我们会取到jie3;如果类型是WITHOUT_TONE,取到的是jie

    (3)HanyuPinyinVCharType类,提供了三个静态常量WITH_U_AND_COLON、WITH_V和WITH_U_UNICODE,之所以有这个类是为了对拼音中的一种特殊情况做处理,比如"吕",我们键盘打字是"lv",而小学课本上是"lü",而在pinyin4j使用的属性文件中存储的是(lu:3),所以该类提供了三种类型,分别表示转换后的格式为"lu:"、"lv"和"lü"

    (4)HanyuPinyinOutputFormat类,该类就是用来定制转换后拼音格式的类,可以设置以上三种类型,默认设置为 HanyuPinyinVCharType.WITH_U_AND_COLON、 HanyuPinyinCaseType.LOWERCASE、 HanyuPinyinToneType.WITH_TONE_NUMBER

    好了,现在使用一下吧

public static String getPinyin(String str){
HanyuPinyinOutputFormat pyFormat = new HanyuPinyinOutputFormat();
pyFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
pyFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pyFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
return PinyinHelper.toHanyuPinyinString(
str, pyFormat, "");
}

调用getPinyin("吕")--->"lü",getPinyin("解")--->"jie"


你可能感兴趣的:(pinyin4j)