突然想到火车票12306网站上在输入地名时,输入拼音也能提示中文名称,可见项目中将中文转换成拼音的情况还是有的,于是网上搜索了下,法相一个“pinyin4j”的java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。

看了几篇简单介绍和使用的帖子,自己也有了想亲身实现一把的冲动哈,嘿嘿以下就是我的学习和实现过程:

1. pinyin4j库的下载地址:官方下载地址2.5.0

2. 成功下载后解压截图:

hanlp java 汉字转拼音 java把汉字转换成拼音_api


doc目录 : pinyin4j的api文档

lib目录 : pinyin4j的jar包

src目录 : pinyin4j的源代码

下面的三个txt文件就是他的更新日志、说明相关的

打开doc目录,双击index.html文件,

hanlp java 汉字转拼音 java把汉字转换成拼音_hanlp java 汉字转拼音_02

根据网上文章实现,我们只要关注HanyuPinyinOutputFormat PinyinHelper等我用红框画出来的几个类即可

3 HanyuPinyinCaseType、HanyupinyinToneType、HanyuPinyinVCharType的介绍

在HanyuPinyinOutputFormat类的api中,最先说明了他的三个关键属性,caseType toneType vCharType

其中:

HanyuPinyinCaseType类中包含两个常量属性:LOWERCASE 和 UPPERCASE ,顾名思义就是大小写,即转换后的汉语拼音是大写还是小写的属性设置;

hanlp java 汉字转拼音 java把汉字转换成拼音_java_03

HanyuPinyinToneType类中包含了三个常量属性:

    WITH_TONE_NUMBER (以数字代替声调的显示格式)

    WITHOUT_TONE (无声调格式)

    WITH_TONE_MARK (有声调格式)

hanlp java 汉字转拼音 java把汉字转换成拼音_字符串_04


HanyuPinyinVCharType类中包含三个常量属性:(就是遇到v u 和unicode的ü  显示方式)

    WITH_V                                v

ü

    WITH_U_AND_COLON        u

hanlp java 汉字转拼音 java把汉字转换成拼音_字符串_05


汉子转换成拼音format格式设置就是这三个属性,当我们设置好我们想要的转换格式后,就可以开始写代码了,当然真正转换的方法是PinyinHelper类,我们可以使用其中的很多方法来完成转换,如截图


hanlp java 汉字转拼音 java把汉字转换成拼音_api_06


我们使用其中的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,实现还是很简单的哈。

好了,学习笔记就这些,记录下来留着方便以后用得到的时候拿出来。