<!-- 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的基本用法 1. 简单介绍 有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cmd”...
Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源项目。 主要的功能有: - 支持同一汉字有多个发音 - 支持拼音的格式化输出,比如第几声之类的 - 支持简体中文、繁体中文转换为拼音
pinyin4j及简单应用,内含代码和jar
一个压缩包,包含三个jar Pinyin4j+pinyinAnalyzer+lucene-analyzers, 在solr中应用方便,经过测试,没有问题
一个汉字转拼音的小例子,使用pinyin4j-2.5.0.jar提供的转换函数,转换出来的拼音还有音调,本项目默认编译版本2.3.3编码GBK源码有注释。
Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大: + 支持同一汉字有多个发音 + 还支持拼音的格式化输出,比如第几声之类的, + 同时支持简体中文、繁体中文转换为...
一个汉字转拼音的小例子,使用pinyin4j-2.5.0.jar提供的转换函数,转换出来的拼音还有音调,本项目默认编译版本2.3.3编码GBK源码有注释。
同时整个项目对用户操作引导、pinyin4j使用、Activity管理、Fragment使用、SQLite数据库管理、通话记录和联系人的管理都有比较好的学习和借鉴意义,默认编码GBK编译版本2.3.3,本项目仅限vip用户免费下载
整理了网上流传pinyin4j-2.5.0.jar应用jar包。 与大家分享下
应用场景:1: 按拼音排序2: 中文网站一般都有suggest功能,是支持拼音的suggest的用到的技术:1,开源的Pinyin4j2,开源的lucene3,开源的solr如何在Lucene里使用? public static void testExec()throws ...
项目UI精美界面布局也是仿照墨迹...项目载入后会调用百度的locSDK自动定位,另外比较赞的地方就是完全实现了墨迹天气中的天气查询列表界面使用了pinyin4j支持将简体和繁体中文转换成汉语拼音(并且支持多音字)。
本项目是一个仿58同城城市列表特效,按a-z字母排序,支持触摸查找。核心功能借助第三方的pinyin4j类库实现
Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大: + 支持同一汉字有多个发音 + 还支持拼音的格式化输出,比如第几声之类的, + 同时支持简体中文、繁体中文转换为拼音…...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
应用举例 目标汉字: 汉字转拼音举例 1 显示用空格分开的拼音 公式: =HzToPy($b$19," ") 结果: hàn zì zhuǎn pīn yīn jǔ lì 2 显示用空格分开的拼音,同时不显示注音符号 公式: =HzToPy($b$19,...
该源码有点类似联系人右侧字母索引效果,源码quickscroll,Quickscroll类似联系人界面右侧的字母索引,当我们按住滚动条滑动,就可以快速滚动到对应的位置,注意:快速滚动索引一般配合pinyin4j.jar使用,完成联系人...
pinyin: jīngluò, also called channel network) is a traditional Chinese medicine belief about a path through which the life-energy known as "qi" flows. Project at GIthub & Vimeo Reference:间隙维...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
本项目是一个仿58同城城市列表特效,按a-z字母排序,支持触摸...核心功能借助第三方的pinyin4j类库实现,右侧的本项目是一个仿58同城城市列表特效,按a-z字母排序,支持触摸查找。核心功能借助第三方的pinyin4j类库实现。
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...