`

pinyin4j 的应用

阅读更多
<!-- pinyin4j -->
<dependency>
	<groupId>com.belerweb</groupId>
	<artifactId>pinyin4j</artifactId>
	<version>2.5.0</version>
</dependency>


import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtils {

	private static final String CHINESE_REGEX = "[\u4e00-\u9fa5]";
	private static final String EMPTY_STRING = "";
	private static final String SPACE_STRING = " ";
	
	/** 私有构造方法 */
	private PinyinUtils() {
		super();
	}

	// -----------------------------------------------------------------------------------------------------------------------

	/**
	 * 生成中文拼音首字母
	 * 
	 * @param chinese 中文字符串
	 * @return 中文拼音首字母
	 */
	public static String cn2FirstSpell(String chinese) {
		return cn2FirstSpell(chinese, true);
	}
	
	/**
	 * 生成中文拼音首字母
	 * 
	 * @param chinese 中文字符串
	 * @param ignoreNonChineseChar 是否忽略非中文字符
	 * @return 中文拼音首字母
	 */
	public static String cn2FirstSpell(String chinese, boolean ignoreNonChineseChar) {
		return cn2FirstSpell(chinese, ignoreNonChineseChar, true); 
	}

	/**
	 * 生成中文拼音首字母
	 * 
	 * @param chinese 中文字符串
	 * @param ignoreNonChineseChar 是否忽略非中文字符
	 * @param lowerCase 生成结果是否为小写字母
	 * @return 中文拼音首字母
	 */
	public static String cn2FirstSpell(String chinese, boolean ignoreNonChineseChar, boolean lowerCase) {
		return cn2FirstSpell(chinese, ignoreNonChineseChar, lowerCase, EMPTY_STRING);
	}

	/**
	 * 生成中文拼音首字母
	 * 
	 * @param chinese 中文字符串
	 * @param ignoreNonChineseChar 是否忽略非中文字符
	 * @param lowerCase 生成结果是否为小写字母
	 * @param separator 分隔符
	 * @return 中文拼音首字母
	 */
	public static String cn2FirstSpell(String chinese, boolean ignoreNonChineseChar, boolean lowerCase, String separator) {
		
		if (chinese == null || chinese.isEmpty()) {
			return EMPTY_STRING;
		}

		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
		
		if (lowerCase) {
			format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		} else {
			format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
		}

		StringBuffer result = new StringBuffer();
		
		char[] arr = chinese.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			char c = arr[i];
			if (! new String(new char[]{c}).matches(CHINESE_REGEX)) {
				if (! ignoreNonChineseChar) {
					result.append(c);
					if (i != arr.length - 1) {
						result.append(separator);
					}
				}
				continue;
			}
			try {
				String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
				if (pinyinArray != null && pinyinArray.length != 0) {
					result.append(pinyinArray[0].charAt(0));
					if (i != arr.length - 1) {
						result.append(separator);
					}
				}
			} catch (BadHanyuPinyinOutputFormatCombination e) {
				throw new IllegalArgumentException(e.getMessage(), e);
			}
		}
		return result.toString().trim();
	}
	
	// -----------------------------------------------------------------------------------------------------------------------
	
	/**
	 * 中文串换为拼音
	 * 
	 * @param chinese 中文字符串
	 * @return 拼音
	 */
	public static String cn2Spell(String chinese) {
		return cn2Spell(chinese, true);
	}
	
	/**
	 * 中文串换为拼音
	 * 
	 * @param chinese 中文字符串
	 * @param ignoreNonChineseChar 是否忽略非中文字符
	 * @return 拼音
	 */
	public static String cn2Spell(String chinese, boolean ignoreNonChineseChar) {
		return cn2Spell(chinese, ignoreNonChineseChar, true);
	}
	
	/**
	 * 中文串换为拼音
	 * 
	 * @param chinese 中文字符串
	 * @param ignoreNonChineseChar 是否忽略非中文字符
	 * @param lowerCase 生成结果是否为小写字母
	 * @return 拼音
	 */
	public static String cn2Spell(String chinese, boolean ignoreNonChineseChar, boolean lowerCase) {
		return cn2Spell(chinese, ignoreNonChineseChar, lowerCase, SPACE_STRING);
	}
	
	/**
	 * 中文串换为拼音
	 * 
	 * @param chinese 中文字符串
	 * @param ignoreNonChineseChar 是否忽略非中文字符
	 * @param lowerCase 生成结果是否为小写字母
	 * @param separator 分隔符
	 * @return 拼音
	 */
	public static String cn2Spell(String chinese, boolean ignoreNonChineseChar, boolean lowerCase, String separator) {
		if (chinese == null || chinese.isEmpty()) {
			return EMPTY_STRING;
		}

		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
		
		if (lowerCase) {
			format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		} else {
			format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
		}

		StringBuffer result = new StringBuffer();
		
		char[] arr = chinese.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			char c = arr[i];
			if (! new String(new char[]{c}).matches(CHINESE_REGEX)) {
				if (! ignoreNonChineseChar) {
					result.append(c);
					if (i != arr.length - 1) {
						result.append(separator);
					}
				}
				continue;
			}
			try {
				String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
				if (pinyinArray != null && pinyinArray.length != 0) {
					result.append(pinyinArray[0].substring(0, pinyinArray[0].length() - 1));
					if (i != arr.length - 1) {
						result.append(separator);
					}
				}
			} catch (BadHanyuPinyinOutputFormatCombination e) {
				throw new IllegalArgumentException(e.getMessage(), e);
			}
		}
	
		return result.toString().trim();
	}
}
分享到:
评论

相关推荐

    pinyin4j工具类和jar包

    Pinyin4j的基本用法 1. 简单介绍 有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cmd”...

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

    Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源项目。 主要的功能有: - 支持同一汉字有多个发音 - 支持拼音的格式化输出,比如第几声之类的 - 支持简体中文、繁体中文转换为拼音

    pinyin4j及简单应用

    pinyin4j及简单应用,内含代码和jar

    拼音分词 Pinyin4j+pinyinAnalyzer+lucene-analyzers

    一个压缩包,包含三个jar Pinyin4j+pinyinAnalyzer+lucene-analyzers, 在solr中应用方便,经过测试,没有问题

    pinyin4j汉字转拼音.zip

    一个汉字转拼音的小例子,使用pinyin4j-2.5.0.jar提供的转换函数,转换出来的拼音还有音调,本项目默认编译版本2.3.3编码GBK源码有注释。   

    pinyin4j-2.5.0(jb51.net)

    Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大: + 支持同一汉字有多个发音 + 还支持拼音的格式化输出,比如第几声之类的, + 同时支持简体中文、繁体中文转换为...

    pinyin4j汉字转拼音

    一个汉字转拼音的小例子,使用pinyin4j-2.5.0.jar提供的转换函数,转换出来的拼音还有音调,本项目默认编译版本2.3.3编码GBK源码有注释。 

    Android应用源码九宫格手势快速拨号项目.zip

    同时整个项目对用户操作引导、pinyin4j使用、Activity管理、Fragment使用、SQLite数据库管理、通话记录和联系人的管理都有比较好的学习和借鉴意义,默认编码GBK编译版本2.3.3,本项目仅限vip用户免费下载

    汉子转拼音

    整理了网上流传pinyin4j-2.5.0.jar应用jar包。 与大家分享下

    lucene-simple-pinyin:支持,Lucene,Solr5.x拼音分词插件

    应用场景:1: 按拼音排序2: 中文网站一般都有suggest功能,是支持拼音的suggest的用到的技术:1,开源的Pinyin4j2,开源的lucene3,开源的solr如何在Lucene里使用? public static void testExec&#40;&#41;throws ...

    高仿墨迹天气源码 简洁版.zip

    项目UI精美界面布局也是仿照墨迹...项目载入后会调用百度的locSDK自动定位,另外比较赞的地方就是完全实现了墨迹天气中的天气查询列表界面使用了pinyin4j支持将简体和繁体中文转换成汉语拼音(并且支持多音字)。   

    Android例子源码高仿58城市列表CityList.zip

    本项目是一个仿58同城城市列表特效,按a-z字母排序,支持触摸查找。核心功能借助第三方的pinyin4j类库实现

    中文转拼音

    Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大: + 支持同一汉字有多个发音 + 还支持拼音的格式化输出,比如第几声之类的, + 同时支持简体中文、繁体中文转换为拼音…...

    java开源包4

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    excel中汉字拼音提取

    应用举例 目标汉字: 汉字转拼音举例 1 显示用空格分开的拼音 公式: =HzToPy($b$19," ") 结果: hàn zì zhuǎn pīn yīn jǔ lì 2 显示用空格分开的拼音,同时不显示注音符号 公式: =HzToPy($b$19,...

    类似联系人右侧字母索引效果.zip

    该源码有点类似联系人右侧字母索引效果,源码quickscroll,Quickscroll类似联系人界面右侧的字母索引,当我们按住滚动条滑动,就可以快速滚动到对应的位置,注意:快速滚动索引一般配合pinyin4j.jar使用,完成联系人...

    body-shadow:太空纹身

    pinyin: jīngluò, also called channel network&#41; is a traditional Chinese medicine belief about a path through which the life-energy known as "qi" flows. Project at GIthub & Vimeo Reference:间隙维...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    Android 高仿58城市列表CityList

    本项目是一个仿58同城城市列表特效,按a-z字母排序,支持触摸...核心功能借助第三方的pinyin4j类库实现,右侧的本项目是一个仿58同城城市列表特效,按a-z字母排序,支持触摸查找。核心功能借助第三方的pinyin4j类库实现。 

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics