使用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获取汉字正确的全拼和简拼(解决多音字问题)

转载自:http://www.open-open.com/lib/view/open1392087665067.html 需要获取汉字的拼音然后根据拼音来实现快速搜索。Java方面有PinYin4j...
  • lkx94
  • lkx94
  • 2016年12月24日 16:14
  • 4593

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

前段时间sprint分配了一项任务,查询一个bug,页面搜索汉字加上拼音的时候,无法匹配。最开始的时候以为拼音函数有问题,所以估了一下点就开始着手这件事情。 拼音工具类如下: /** * ...
  • kimkd
  • kimkd
  • 2016年05月31日 00:06
  • 489

Pinyin4j获取中文拼音

1.     简单介绍 有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cm...
  • MrAlgernon
  • MrAlgernon
  • 2016年07月14日 15:21
  • 1816

将日文半角片假名转换成全角片假名

//区別文字列は、arrayである。注:対象は、全角/半角の片仮名と英語文字のみに限られている。function my_split($string){ $count = mb_strlen($stri...
  • senlin2684
  • senlin2684
  • 2007年06月13日 09:38
  • 1929

[pinyin4j] java版汉字转换拼音(大小写)

pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2....
  • ssrc0604hx
  • ssrc0604hx
  • 2014年12月04日 16:13
  • 18363

pinyin4j使用示例(支持多音字)

pinyin4j的主页:http://pinyin4j.sourceforge.net/ pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。 pinyin4j是一个支持将中...
  • zhao897426182
  • zhao897426182
  • 2017年08月24日 18:42
  • 90

Pinyin4j的基本用法

1.     简单介绍 有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cm...
  • duoluo9
  • duoluo9
  • 2017年07月06日 14:03
  • 97

pinyin4j获取汉字正确的全拼和简拼

最近公司开发一个项目,需要获取汉字的拼音然后根据拼音来实现快速搜索。Java方面有PinYin4j开源项目获取汉字的拼音,但是对多音字处理的不好,自己研究了一下,终于给解决了。在这里跟大家分享一下! ...
  • FX_SKY
  • FX_SKY
  • 2013年01月22日 20:47
  • 8244

中文全角和半角输入有什么区别?

摘自:http://blog.csdn.net/kevinhg/article/details/8702462 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"...
  • liming0931
  • liming0931
  • 2014年03月28日 11:15
  • 7160

pinyin4j的简单使用

在做的列表排序的时候,想按拼音首字母排序,于是在网上找到pinyin4j这个开源项目,简单介绍一下这个包的使用吧。Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以...
  • peekabo_o
  • peekabo_o
  • 2016年03月14日 17:49
  • 2007
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用pinyin4j获取汉字的拼音和全角半角转换
举报原因:
原因补充:

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