`

pinyin4j使用

阅读更多

最近在列表排序上遇到了一个关于中文排序的问题 很自然的百度以后找到了一个工具pinyin4j

这里就pinyin4j的基础使用笔记一下 其实百度上也能得到类似的结果

 

首先来看一个HanyuPinyinOutputFormat的类 因为之后我们在将中文转化为拼音的过程中 需要传入这个参数

 

		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		//设置转化后字符的大小写
		//HanyuPinyinCaseType.UPPERCASE 转化为大写
		//HanyuPinyinCaseType.LOWERCASE 转化为小写
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		//设置转化后音调的表示方式
		//HanyuPinyinToneType.WITH_TONE_MARK 带音调 dǎ
		//HanyuPinyinToneType.WITH_TONE_NUMBER 以数字代表音调 da3
		//HanyuPinyinToneType.WITHOUT_TONE 不带音调 da
	    format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);//不带声调
	    //设置转化后ü这个辅音的呈现形式
	    //HanyuPinyinVCharType.WITH_U_AND_COLON 表现为 u:
	    //HanyuPinyinVCharType.WITH_U_UNICODE 表现为 ü
	    //HanyuPinyinVCharType.WITH_V 表现为v
	    format.setVCharType(HanyuPinyinVCharType.WITH_V);//yu这个音的表示方式

 

 

如上面看到的 format有3个参数 用于格式化之后显示的规则

将中文转化为拼音的过程 我们会用到PinyinHelper这个类 它拥有一系列的静态方法 这里使用最常用的一种

 

			char[] s1Chars=s1.toCharArray();
			String s1Result="";//存储最后的结果
			try {
				for(int i=0;i<s1Chars.length;i++){
					//如果为中文
					if(String.valueOf(s1Chars[i]).matches("[\\u4E00-\\u9FA5]+")){
						String[] temp=PinyinHelper.toHanyuPinyinStringArray(s1Chars[i],format);
						s1Result+=temp[0];
					}else{
						s1Result+=String.valueOf(s1Chars[i]);
					}
				}
			} catch (BadHanyuPinyinOutputFormatCombination e) {
				e.printStackTrace();
			}

 

 

要注意的是 如果是中英文混合的情况 需要区分对待 因为PinyinHelper.toHanyuPinyinStringArray方法如果传入一个英文字符 会返回null

之所以返回值是一个String数组 是因为可能有多音字的情况

 

附上pinyin4j.jar

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics