<!-- 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();
}
}
分享到:
相关推荐
在Android开发中,Pinyin4j的应用尤为广泛。由于Android系统本身的局限性,原生SDK并不提供汉字转拼音的功能,而Pinyin4j作为一个轻量级的库,能够轻松集成到Android项目中,用于实现诸如汉字排序、关键词搜索、拼音...
3. **音节分隔**:在某些应用场景下,我们需要将拼音按照音节进行分割,例如"beijing"转换为"bei-jing",pinyin4j也能轻松完成。 4. **拼音首字母处理**:在搜索引擎优化中,常用汉字的拼音首字母进行关键词索引,...
《pinyin4j-2.5.0:Java实现的汉语拼音转换库》 在Java开发中,有时候我们需要将汉字转换成对应的汉语拼音,以便进行各种处理,如搜索、排序或者处理多音字问题。这时,`pinyin4j-2.5.0`这个开源库就显得尤为重要。...
在实际应用中,pinyin4j常被用于以下场景: - 搜索优化:将汉字关键词转换为拼音,便于进行不区分大小写和声调的搜索。 - 数据分析:在对中文文本进行统计分析时,可以先转换为拼音,简化处理过程。 - 中文输入法:...
《pinyin4j:解决中文多音字问题的利器》 在中文处理中,多音字是一个常见的挑战。多音字是指一个汉字有多个读音,根据不同的语境和组合,其发音会有所不同。例如,“长”既可以读作“cháng”,也可以读作“zhǎng...
Pinyin4j能识别并返回每个汉字的正确声调,如"ma"(一声)、"mā"(二声)、"ma"(三声)、"mà"(四声)。 3. **多音字处理**:对于有多个读音的汉字,Pinyin4j能够提供所有可能的拼音,如"行"(xíng、háng)。 ...
在Java编程环境中,有时...无论是进行文本分析,还是创建具有拼音功能的应用,`pinyin4j`都能提供坚实的支持。在实际开发中,结合其他文本处理技术,如分词、关键词提取等,可以进一步提升应用程序的功能性和用户体验。
《关于pinyin4j-2.5.1.jar与Java拼音处理库的解析与应用》 在Java开发中,处理中文字符转化为拼音是一项常见的任务,这时我们常常会使用到pinyin4j这个开源库。然而,如果在项目中遇到"The import ...
pinyin4j-2.5.0.zip这个压缩包便是这一强大工具的载体,包含了一切你需要的功能,以适应各种应用场景。 pinyin4j的核心功能是将汉字转换为对应的汉语拼音,这在很多场景下都极其实用。例如,当我们在开发一个基于...
除了基本的转换功能,pinyin4j还考虑到了实际应用中的复杂需求。例如,它支持获取汉字的首字母,这对于实现模糊搜索或者关键词的首字母排序很有帮助。通过`PinyinHelper.toHanyuPinyinInitialLetter(char)`方法,...
无论是简单的拼音获取,还是复杂的应用场景,Pinyin4j都能够提供稳定且灵活的支持,大大简化了开发过程,提高了代码的可读性和可维护性。对于需要处理中文数据的项目,Pinyin4j无疑是不可或缺的一部分。
本文将详细介绍pinyin4j的核心功能、使用方法及其在实际开发中的应用。 一、pinyin4j简介 pinyin4j是由Liu Jiangyong开发的一款开源Java库,主要功能是将汉字转换为汉语拼音。它支持多种拼音表示方式,包括全拼、...
《pinyin4j-2.5.0.jar:Java汉字转拼音工具的全面解析与应用》 在Java编程中,处理汉字与拼音的转换是一项常见的任务,尤其在文本处理、搜索索引、拼音输入法等领域。pinyin4j库正是为了解决这一问题而设计的。本文...
《pinyin4j:汉字转拼音的利器》 在处理汉字到拼音转换的场景中,pinyin4j是一个不可或缺的工具。它是一个Java库,专为处理汉字转换为拼音而设计,尤其适用于需要进行中文信息处理、搜索引擎优化、或者任何需要汉字...
本文将详细介绍pinyin4j库的功能、原理以及如何在实际项目中应用。 pinyin4j是一个Java库,专门用于处理汉字与拼音之间的转换,尤其适用于那些需要将中文数据转换为拼音进行进一步处理的场景,如搜索引擎优化、数据...
在实际应用中,我们可以结合Java编程语言,通过导入pinyin4j-2.5.0.jar,创建一个简单的示例来演示如何使用这个库: ```java import com.belerweb.pinyin4j.PinyinHelper; public class PinyinExample { public ...
《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字转换为拼音,以便进行搜索、排序或者国际化处理。这时,一个高效且准确的中文转拼音工具显得尤为重要...
总的来说,pinyin4j源码是一个宝贵的教育资源,它揭示了汉字转拼音技术的实现细节,有助于开发者更好地利用这个工具,并从中汲取灵感,应用到自己的项目中。无论是初学者还是经验丰富的开发人员,都能从中受益匪浅。