突然想到火车票12306网站上在输入地名时,输入拼音也能提示中文名称,可见项目中将中文转换成拼音的情况还是有的,于是网上搜索了下,法相一个“pinyin4j”的java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。
看了几篇简单介绍和使用的帖子,自己也有了想亲身实现一把的冲动哈,嘿嘿以下就是我的学习和实现过程:
1. pinyin4j库的下载地址:官方下载地址 目前最新的版本是2.5.0
2. 成功下载后解压截图:
doc目录 : pinyin4j的api文档
lib目录 : pinyin4j的jar包
src目录 : pinyin4j的源代码
下面的三个txt文件就是他的更新日志、说明相关的
打开doc目录,双击index.html文件,
根据网上文章实现,我们只要关注HanyuPinyinOutputFormat PinyinHelper等我用红框画出来的几个类即可
3 HanyuPinyinCaseType、HanyupinyinToneType、HanyuPinyinVCharType的介绍
在HanyuPinyinOutputFormat类的api中,最先说明了他的三个关键属性,caseType toneType vCharType
其中:
HanyuPinyinCaseType类中包含两个常量属性:LOWERCASE 和 UPPERCASE ,顾名思义就是大小写,即转换后的汉语拼音是大写还是小写的属性设置;
HanyuPinyinToneType类中包含了三个常量属性:
WITH_TONE_NUMBER (以数字代替声调的显示格式)
WITHOUT_TONE (无声调格式)
WITH_TONE_MARK (有声调格式)
HanyuPinyinVCharType类中包含三个常量属性:(就是遇到v u 和unicode的ü 显示方式)
WITH_V v
WITH_U_UNICODE ü
WITH_U_AND_COLON u
汉子转换成拼音format格式设置就是这三个属性,当我们设置好我们想要的转换格式后,就可以开始写代码了,当然真正转换的方法是PinyinHelper类,我们可以使用其中的很多方法来完成转换,如截图
我们使用其中的toHanyuPinyinStringArray(char,outformat)方法。
4. 开始编码工作,自己动手实现下,哈哈!!!
标准的固话程序,先创建个工程,然后建个包,在创建个class。。。。。。(哈哈)
根据上文的介绍,首先创建个HanyuPinyinOutputFormat类,然后设置好三个输出格式,具体代码如下:
public class TransChineseWord {
/**
* 中文转换拼音方法,使用pinyin4j
* @param string 带转换的字符串
* @return 拼音字符串
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static String transPinyin(String string) throws BadHanyuPinyinOutputFormatCombination{
// 创建format
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
// 设置format为小写的格式
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// 设置format为带音调的格式
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
// 设置format为ü的显示格式
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
// 将string转换成char数组
char[] preTransChars = string.toCharArray();
// 定义一个接收转换后的StringBuilder变量
StringBuilder outputBuilder = new StringBuilder();
// for
int length = preTransChars.length;
for(int i=0;i<length;i++){
// 如果当前字符是中文,将转换成汉语拼音字符数组
if(Character.toString(preTransChars[i]).matches("[\u4E00-\u9FA5]+")){
String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(preTransChars[i], format);
outputBuilder.append(pinyins[0]).append(" ");
}else{// 如果不是中文,则不转换直接拼接
outputBuilder.append(Character.toString(preTransChars[i]));
}
}
return outputBuilder.toString();
}
public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
String testString = "使用pinyin4j类库将中文转换成汉语拼音的demo实例!";
String outputString = transPinyin(testString);
System.out.println(outputString);
}
}
右击runas运行结果显示为:
shi yong pinyin4jlei ku jiang zhong wen zhuan huan cheng han yu pin yin de demoshi li !
但是,当我把代码中的无音调改为有音调格式后
// 设置format为带音调的格式
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
运行结果为:
sh? yòng pinyin4jlèi kù jiāng zhōng wén zhu?n huàn chéng hàn y? pīn yīn de demoshí lì !
可能是我本地字体库里面缺少对应的音标字符字体吧,不管怎么说,将中文转换成汉语拼音就是这么简单,只用了解了相关的api,实现还是很简单的哈。
好了,学习笔记就这些,记录下来留着方便以后用得到的时候拿出来。