`

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.zip pinyin4j.jar

    在Android开发中,Pinyin4j的应用尤为广泛。由于Android系统本身的局限性,原生SDK并不提供汉字转拼音的功能,而Pinyin4j作为一个轻量级的库,能够轻松集成到Android项目中,用于实现诸如汉字排序、关键词搜索、拼音...

    pinyin4j jar包

    3. **音节分隔**:在某些应用场景下,我们需要将拼音按照音节进行分割,例如"beijing"转换为"bei-jing",pinyin4j也能轻松完成。 4. **拼音首字母处理**:在搜索引擎优化中,常用汉字的拼音首字母进行关键词索引,...

    pinyin4j-2.5.0

    《pinyin4j-2.5.0:Java实现的汉语拼音转换库》 在Java开发中,有时候我们需要将汉字转换成对应的汉语拼音,以便进行各种处理,如搜索、排序或者处理多音字问题。这时,`pinyin4j-2.5.0`这个开源库就显得尤为重要。...

    pinyin4j-2.5.0.jar下载

    在实际应用中,pinyin4j常被用于以下场景: - 搜索优化:将汉字关键词转换为拼音,便于进行不区分大小写和声调的搜索。 - 数据分析:在对中文文本进行统计分析时,可以先转换为拼音,简化处理过程。 - 中文输入法:...

    pinyin4j(解决多音字问题源码)

    《pinyin4j:解决中文多音字问题的利器》 在中文处理中,多音字是一个常见的挑战。多音字是指一个汉字有多个读音,根据不同的语境和组合,其发音会有所不同。例如,“长”既可以读作“cháng”,也可以读作“zhǎng...

    pinyin4j pinyin4j

    Pinyin4j能识别并返回每个汉字的正确声调,如"ma"(一声)、"mā"(二声)、"ma"(三声)、"mà"(四声)。 3. **多音字处理**:对于有多个读音的汉字,Pinyin4j能够提供所有可能的拼音,如"行"(xíng、háng)。 ...

    汉语转换成拼音的jar包pinyin4j-2.5.0版本

    在Java编程环境中,有时...无论是进行文本分析,还是创建具有拼音功能的应用,`pinyin4j`都能提供坚实的支持。在实际开发中,结合其他文本处理技术,如分词、关键词提取等,可以进一步提升应用程序的功能性和用户体验。

    pinyin4j-2.5.1.jar

    《关于pinyin4j-2.5.1.jar与Java拼音处理库的解析与应用》 在Java开发中,处理中文字符转化为拼音是一项常见的任务,这时我们常常会使用到pinyin4j这个开源库。然而,如果在项目中遇到"The import ...

    pinyin4j-2.5.0.zip

    pinyin4j-2.5.0.zip这个压缩包便是这一强大工具的载体,包含了一切你需要的功能,以适应各种应用场景。 pinyin4j的核心功能是将汉字转换为对应的汉语拼音,这在很多场景下都极其实用。例如,当我们在开发一个基于...

    pinyin4j-2.5.0.jar

    除了基本的转换功能,pinyin4j还考虑到了实际应用中的复杂需求。例如,它支持获取汉字的首字母,这对于实现模糊搜索或者关键词的首字母排序很有帮助。通过`PinyinHelper.toHanyuPinyinInitialLetter(char)`方法,...

    net.sourceforge.pinyin4j.zip

    无论是简单的拼音获取,还是复杂的应用场景,Pinyin4j都能够提供稳定且灵活的支持,大大简化了开发过程,提高了代码的可读性和可维护性。对于需要处理中文数据的项目,Pinyin4j无疑是不可或缺的一部分。

    pinyin4j 开发jar包

    本文将详细介绍pinyin4j的核心功能、使用方法及其在实际开发中的应用。 一、pinyin4j简介 pinyin4j是由Liu Jiangyong开发的一款开源Java库,主要功能是将汉字转换为汉语拼音。它支持多种拼音表示方式,包括全拼、...

    pinyin4j-2.5.0.jar+使用说明+使用代码

    《pinyin4j-2.5.0.jar:Java汉字转拼音工具的全面解析与应用》 在Java编程中,处理汉字与拼音的转换是一项常见的任务,尤其在文本处理、搜索索引、拼音输入法等领域。pinyin4j库正是为了解决这一问题而设计的。本文...

    pinyin4j最新jar包,汉字转pinyin必备

    《pinyin4j:汉字转拼音的利器》 在处理汉字到拼音转换的场景中,pinyin4j是一个不可或缺的工具。它是一个Java库,专为处理汉字转换为拼音而设计,尤其适用于需要进行中文信息处理、搜索引擎优化、或者任何需要汉字...

    pinyin4j所需jar包

    本文将详细介绍pinyin4j库的功能、原理以及如何在实际项目中应用。 pinyin4j是一个Java库,专门用于处理汉字与拼音之间的转换,尤其适用于那些需要将中文数据转换为拼音进行进一步处理的场景,如搜索引擎优化、数据...

    pinyin4j-2.5.0.jar 中文转化拼音,获取首字母

    在实际应用中,我们可以结合Java编程语言,通过导入pinyin4j-2.5.0.jar,创建一个简单的示例来演示如何使用这个库: ```java import com.belerweb.pinyin4j.PinyinHelper; public class PinyinExample { public ...

    中文转拼音工具类,pinyin4j-2.5.0.jar 适用于地址人名

    《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字转换为拼音,以便进行搜索、排序或者国际化处理。这时,一个高效且准确的中文转拼音工具显得尤为重要...

    pinyin4j源码

    总的来说,pinyin4j源码是一个宝贵的教育资源,它揭示了汉字转拼音技术的实现细节,有助于开发者更好地利用这个工具,并从中汲取灵感,应用到自己的项目中。无论是初学者还是经验丰富的开发人员,都能从中受益匪浅。

Global site tag (gtag.js) - Google Analytics