使用pinyin4j获取汉字的拼音和全角半角转换

原创 2016年05月31日 00:06:03

前段时间sprint分配了一项任务,查询一个bug,页面搜索汉字加上拼音的时候,无法匹配。最开始的时候以为拼音函数有问题,所以估了一下点就开始着手这件事情。

拼音工具类如下:

/**  
	 * 获取汉字串拼音首字母,英文字符不变  
	 * @param chinese 汉字串  
	 * @return 汉语拼音首字母  
	 */
	public static String getFirstSpell(String chinese) {
		if(chinese == null){
			return "";
		}
		StringBuffer pybf = new StringBuffer();
		char[] arr = chinese.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > 128) {
				try {
					String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
					if (temp != null) {
						pybf.append(temp[0].charAt(0));
					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				pybf.append(arr[i]);
			}
		}
		return pybf.toString().replaceAll("\\W", "").trim();
	}

方法很简单,先对输入内容进行判别,如果是汉字(arr[i] > 128),那么就使用pinyin4j获取汉字的首字母,其中对于多音字的情况,我这里设置成了只取第一个,并且WITHOUT_TONE没有对几声进行辨识(相对于大多数业务都是不需要的,具体的可以查看API,如果你需要的话。);如果不是汉字的话,我就原样给它加在了返回字符串最后。然后通过repalce替换成只有字母和数字存在的字符串。

看到这里,大家或许觉得都没有问题,但是问题来了。微笑微笑微笑微笑.

输入的字符串中的字母竟然是全角的!!!!!!

我当时可是看了好久,好久,而且还无法复现问题,以为是方法出了问题。期间我对arr[i]>128进行了怀疑,然后通过正则匹配汉字(百度之),阿西吧,it doesn't work!然后我就~~~~~~被测试妹子复现了,哈哈哈哈。接着就是简单的全角转半角了啊。全角转半角的代码出处无法考核,反正是百度的。。

全角转半角代码(其中的全局变量请百度之,哈哈哈哈哈哈)

/**
	 * 全角转半角
	 * 
	 * @param fullWidthStr
	 *            字符串
	 * @return
	 */
	private static String fullWidth2halfWidth(String fullWidthStr) {
		if (null == fullWidthStr || fullWidthStr.length() <= 0) {
			return "";
		}
		char[] charArray = fullWidthStr.toCharArray();
		// 对全角字符转换的char数组遍历
		for (int i = 0; i < charArray.length; ++i) {
			int charIntValue = (int) charArray[i];
			// 如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换
			if (charIntValue >= SBC_CHAR_START && charIntValue <= SBC_CHAR_END) {
				charArray[i] = (char) (charIntValue - CONVERT_STEP);
			} else if (charIntValue == SBC_SPACE) {
				charArray[i] = (char) DBC_SPACE;
			}
		}
		return new String(charArray).toLowerCase();
	}





相关文章推荐

探索PinYin4j.jar将汉字转换为拼音的基本用法

将汉字转换为拼音在Android开发中是个很常见的问题。例如:在Android手机应用开发中,要查询联系人的姓名,通常都是用拼音进行查询的。 Pinyin4j是一个功能强悍的汉语拼音工具包,是sou...

使用PinYin4j.jar将汉字转换为拼音

可以使用pinyin4j.jar来实现将汉字转换为拼音的功能.代码如下: package mainApp; import net.sourceforge.pinyin4j.PinyinHel...

J2EE 使用pinyin4j实现汉字转换拼音

由于项目需求,要求用户输入中文姓名自动转换成拼音,找到了pinyin4j学习了一下。 很多地方都又见到需要这个功能,所以在这里记录一下学习笔记。 这里也是按照我学习的顺序记录。可以理解成为倒叙,不知道...

使用PinYin4j.jar将汉字转换为拼音 .

可以使用pinyin4j.jar来实现将汉字转换为拼音的功能.代码如下:   package mainApp; import net.sourceforge.pinyin4j.Pinyi...

使用PinYin4j.jar将汉字转换为拼音

转载:http://blog.chinaunix.net/uid-20648927-id-2221486.html package com.Test.util; import net.source...

JAVA实现汉字转换为拼音 pinyin4j/JPinyin

在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代...

Android使用pinyin4j完成简单汉字转拼音

看过挺多的关于汉字转拼音的博客,都讲的不是很清楚,在这里我再记录一下我的代码: 首先我们使用的是pinyin4j第三方包,我们需要给项目添加一个依赖: com...
  • Key_MQL
  • Key_MQL
  • 2017年05月16日 19:00
  • 137

java 使用sourceforge.pinyin4j查询汉字拼音

在我们的系统中,可能经常需要按首字母排序一些信息(比如淘宝商城的品牌列表字母序排列),那么我们就需要一个能够根据汉字查询对应的拼音,取出拼音的首字母即可。   我们使用sourceforg...

pinyin4j:拼音与汉字的转换实例

Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 官网: http://pinyin4j.sourceforge.net/ 有时候,需要将汉字编程对应的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用pinyin4j获取汉字的拼音和全角半角转换
举报原因:
原因补充:

(最多只允许输入30个字)