`
liuxing87327
  • 浏览: 82783 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用pinyin4j将中文转换为拼音

    博客分类:
  • java
阅读更多

 

 

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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class SpellHelper {

	/**
	 * 将中文转换为拼音
	 * @param name
	 * @return
	 */
	public static String getEname(String name) {
		HanyuPinyinOutputFormat pyFormat = new HanyuPinyinOutputFormat();
		pyFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		pyFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		pyFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

		try {
			return PinyinHelper.toHanyuPinyinString(name, pyFormat, "");
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return "";
	}
	
	/**
	 * 取字符拼音的第一个字母
	 * @param name
	 * @return
	 */
	public static String getFirstEName(String name) {
		if(DyString.isEmpty(name))
			return "";
		
		String spell = "";
		String _name = name.replaceAll("[ ― …《》\\.,,。;`;\\!!\\??‘’<>\"“”、■#★●【】\\{\\}\\[\\]()+{}[]\\(\\)\\|\\-::~~!@#$%^&*\\(\\)/\\,\\.¥——]", "").trim();
		
		char[] strs = _name.toCharArray();
		for (int i = 0; i < strs.length; i++) {
			String upCaseText = getEname("" + strs[i]);
			spell += upCaseText.substring(0, 1);
		}
		return spell;
	}
	
	public static void main(String[] args) {
		System.out.println(getEname("长沙阁酒店公寓(瑞苑)"));
		System.out.println(getFirstEName("长沙阁酒店公寓(瑞苑)"));
	}

}

 

 

 

 

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 汉字转换拼音工具类
 * 
 * @Author liuxing
 * @Date 2013-03-14
 */
public class PinYin4JCn {
	
	private static HanyuPinyinOutputFormat spellFormat = null;
	private static String reg = "[ ― …《》\\.,,。;`;\\!!\\??‘’<>\"“”、■#★●【】\\{\\}\\[\\]()+{}[]\\(\\)\\|\\-::~~!@#$%^&*\\(\\)/\\,\\.¥——]";
	
	/**
	 * 将中文转换为拼音
	 * 不区分多音字
	 * @param name
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static String converterNoSpaceSpell(String name) {
		if(spellFormat == null){
			spellFormat = new HanyuPinyinOutputFormat();
			spellFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
			spellFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
			spellFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
		}

		try {
			return PinyinHelper.toHanyuPinyinString(name, spellFormat, "");
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return "";
	}
	
	/**
	 * 将中文转换为全拼(带空格)
	 * 不区分多音字
	 * @param name
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static String converterSpell(String name) {
		if(spellFormat == null){
			spellFormat = new HanyuPinyinOutputFormat();
			spellFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
			spellFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
			spellFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
		}
		
		try {
			return PinyinHelper.toHanyuPinyinString(name, spellFormat, " ");
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return "";
	}
	
	/**
	 * 取字符拼音的第一个字母
	 * 不区分多音字
	 * @param name
	 * @return
	 */
	public static String converterToFirstSpell(String name) {
		if(Strings.isEmpty(name)){
			return "";
		}
		
		String spell = "";
		String _name = name.replaceAll(reg, "").trim();
		
		char[] strs = _name.toCharArray();
		String upCaseText = null;
		for (int i = 0; i < strs.length; i++) {
			upCaseText = converterNoSpaceSpell("" + strs[i]);
			spell += upCaseText.substring(0, 1);
		}
		return spell;
	}
	
	/**
	 * 汉字转换位汉语拼音首字母,英文字符不变,
	 * 特殊字符丢失 支持多音字,生成方式如(重当参:cdc,zds,cds,zdc)
	 * @param chines
	 * @return
	 */
	public static String converterToFirstSpellWithPolyphone(String chines) {
		StringBuffer pinyinName = new StringBuffer();
		char[] nameChar = chines.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < nameChar.length; i++) {
			if (nameChar[i] > 128) {
				try {
					// 取得当前汉字的所有全拼
					String[] strs = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat);
					if (strs != null) {
						for (int j = 0; j < strs.length; j++) {
							// 取首字母
							pinyinName.append(strs[j].charAt(0));
							if (j != strs.length - 1) {
								pinyinName.append(",");
							}
						}
					}
//					else {
//						pinyinName.append(nameChar[i]);
//					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				pinyinName.append(nameChar[i]);
			}
			pinyinName.append(" ");
		}
		return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));
	}

	/**
	 * 汉字转换位汉语全拼,英文字符不变,特殊字符丢失
	 * 支持多音字,生成方式如(重当参:zhongdangcen,zhongdangcan,chongdangcen,chongdangshen,zhongdangshen,chongdangcan)
	 * @param chines
	 * @return
	 */
	public static String converterToSpellWithPolyphone(String chines) {
		StringBuffer pinyinName = new StringBuffer();
		char[] nameChar = chines.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < nameChar.length; i++) {
			if (nameChar[i] > 128) {
				try {
					// 取得当前汉字的所有全拼
					String[] strs = PinyinHelper.toHanyuPinyinStringArray(
							nameChar[i], defaultFormat);
					if (strs != null) {
						for (int j = 0; j < strs.length; j++) {
							pinyinName.append(strs[j]);
							if (j != strs.length - 1) {
								pinyinName.append(",");
							}
						}
					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				pinyinName.append(nameChar[i]);
			}
			pinyinName.append(" ");
		}
		return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));
	}

	/**
	 * 
	 * 功能说明:获取所有的优化结果集
	 * 刘兴  2013-8-7 下午5:19:24
	 * 修改者名字:
	 * 修改日期:
	 * 修改内容:
	 * @param str
	 * @return
	 */
	public static String converterToAllSpellWithPolyphone(String str){
		String firstSpell = converterToFirstSpellWithPolyphone(str);
		String spell = converterToSpellWithPolyphone(str);
		
		if(Strings.isNotEmpty(firstSpell)){
			firstSpell = firstSpell + ",";
		}
		return firstSpell + spell;
	}
	
	/**
	 * 去除多音字重复数据
	 * @param theStr
	 * @return
	 */
	private static List<Map<String, Integer>> discountTheChinese(String theStr) {
		// 去除重复拼音后的拼音列表
		List<Map<String, Integer>> mapList = new ArrayList<Map<String, Integer>>();
		// 用于处理每个字的多音字,去掉重复
		Map<String, Integer> onlyOne = null;
		String[] firsts = theStr.split(" ");
		// 读出每个汉字的拼音
		for (String str : firsts) {
			onlyOne = new Hashtable<String, Integer>();
			String[] china = str.split(",");
			// 多音字处理
			for (String s : china) {
				Integer count = onlyOne.get(s);
				if (count == null) {
					onlyOne.put(s, new Integer(1));
				} else {
					onlyOne.remove(s);
					count++;
					onlyOne.put(s, count);
				}
			}
			mapList.add(onlyOne);
		}
		return mapList;
	}

	/**
	 * 解析并组合拼音,对象合并方案
	 * @param list
	 * @return
	 */
	private static String parseTheChineseByObject(List<Map<String, Integer>> list) {
		Map<String, Integer> first = null; // 用于统计每一次,集合组合数据

		for (int i = 0; i < list.size(); i++) {
			// 每一组集合与上一次组合的Map
			Map<String, Integer> temp = new Hashtable<String, Integer>();
			
			// 第一次循环,first为空
			if (first != null) {
				// 取出上次组合与此次集合的字符,并保存
				for (String s : first.keySet()) {
					for (String s1 : list.get(i).keySet()) {
						temp.put(s + s1, 1);
					}
				}
				
				// 清理上一次组合数据
				if (temp != null && temp.size() > 0) {
					first.clear();
				}
			} else {
				for (String s : list.get(i).keySet()) {
					temp.put(s, 1);
				}
			}
			
			// 保存组合数据以便下次循环使用
			if (temp != null && temp.size() > 0) {
				first = temp;
			}
		}
		
		if (first == null) 
			return "";
		
		String reltStr = "";
		
		for (String str : first.keySet()) {
			reltStr += ("," + str);
		}
		
		if (Strings.isNotEmpty(reltStr)) {
			return reltStr.replaceFirst(",", "");
		}
		
		return reltStr;
	}

	public static void main(String[] args) {
		String str = "单田芳";
//		System.out.println(converterToFirstSpellWithPolyphone(str));
//		System.out.println(converterToSpellWithPolyphone(str));
//		System.out.println(converterSpell(str));
		System.out.println(converterToFirstSpellWithPolyphone(str));
	}

}

 

 

分享到:
评论

相关推荐

    汉字转换拼音 java

    例如,使用Pinyin4j库,只需引入依赖,然后通过调用特定方法,就能快速地将汉字转换为拼音。下面是一个简单的示例: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class HanziToPinyin { ...

    汉字转换为拼音,取汉字的拼音首字母

    在Java项目中,引入`pinyin4j`库可以方便地将汉字转换为拼音,从而进行各种基于拼音的处理。 **3. 使用pinyin4j库进行汉字转拼音** 使用`pinyin4j`库时,首先需要在项目中引入该库的jar包。在这个案例中,已提供了...

    将汉字转换成拼音 java 源码

    - **Pinyin4j** 是一个强大的Java库,主要用于将中文汉字转换为拼音,同时支持多种配置选项来调整输出格式。 - 这个库提供了一系列工具类和枚举类型来帮助开发者定制拼音的输出方式,例如是否带有声调、拼音首字母大...

    拼音4j 基本用法

    拼音4j是一个专门用于处理中文拼音的Java库,它为开发者提供了方便快捷的接口,以便在程序中进行汉字与拼音的转换、拼音排序等操作。在Java开发中,如果需要处理中文字符的拼音信息,拼音4j是一个值得考虑的工具。...

    使用拼音4j汉字转拼音例子

    总的来说,拼音4j是一个强大且易于使用的Java库,可以帮助开发人员方便地实现汉字到拼音的转换。通过理解并应用以上代码示例,你可以轻松地在自己的项目中实现类似功能,从而提高处理汉字文本的效率。

    pinyin4J java拼音转换工具

    pinyin4J java拼音转换工具 java汉字转换拼音工具

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

    `pinyin4j`库的核心功能是将汉字转换为汉语拼音。这个过程涉及到多个方面,包括识别多音字、处理声调以及提供不同的拼音输出格式。例如,对于汉字"好",`pinyin4j`可以输出"haο"(无声调形式)或"hǎo"(带声调形式...

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

    将汉字转换为拼音在Android开发中是个很常见的问题。例如:在Android手机应用开发中,要查询联系人的姓名,通常都是用拼音进行查询的。 Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源...

    JAVA 汉字转换拼音

    在Java编程语言中,汉字转换拼音是一个常见的需求,特别是在处理中文数据、搜索引擎优化或文本处理等领域。本主题将深入探讨如何使用pinyin4j库来实现这一功能。 首先,pinyin4j是一个开源的Java库,它允许开发者...

    java将汉字转为拼音

    接下来,我们将通过一个简单的Java代码示例来展示如何使用Pinyin4j将汉字转换为拼音: ```java import net.sourceforge.pinyin4j.PinyinHelper; import ...

    Java利用ascii码表把汉字转换成拼音

    Pinyin4j是一个Java工具包,它能够将汉字转换为汉语拼音,并提供了多种格式化选项。如果不想引入外部库,也可以通过查找汉字与拼音的映射表自行实现。 自定义实现的基本步骤如下: 1. 创建一个映射表:这个映射表...

    将汉字转换为汉语拼音java实现

    综上所述,实现“将汉字转换为汉语拼音”的Java程序涉及到了Java API的使用、第三方库的选择与集成、多音字处理、编码问题以及性能优化等多个方面。开发这样的程序需要对Java语言特性、Unicode字符集、中文处理策略...

    将简体中文和繁体中文转换拼音的jar包 pinyin4j-2.5.0.jar

    pinyin4j是一个轻量级的Java库,专门用于将汉字转换为汉语拼音。它支持简体中文和繁体中文的转换,能够处理单个汉字、词语甚至整个句子。该库由Barry S. Wang开发,并在Apache 2.0许可下发布,意味着你可以自由地在...

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

    ### pinyin4j:Java版汉字转换拼音大小写 #### 概述 本文档主要介绍如何使用`pinyin4j`库实现Java程序中的汉字到拼音的转换,并着重讲解如何控制转换后拼音的大小写形式。`pinyin4j`是一款功能强大的开源库,能够...

    Java汉字转换拼音

    总的来说,Java汉字转换拼音主要依赖于第三方库,如`pinyin4j`,通过这些库提供的接口和方法,我们可以方便地实现汉字到拼音的转换,并根据实际需求进行相应的处理。在开发过程中,注意选择适合项目需求的库,并充分...

    输入汉字转换成拼音

    在IT领域,将汉字转换为拼音是一项常见的任务,特别是在文本处理、搜索引擎优化(SEO)、自动补全和数据库查询等方面有着广泛的应用。这个压缩包文件"pinyin"可能包含了一个实现汉字到拼音转换的程序或者库,对于...

    Android汉字转换成对应的拼音

    本文将深入探讨如何在Android中利用"Pinyin4j"库将汉字转换为拼音。 首先,我们需要理解"Pinyin4j"是什么。Pinyin4j是一个开源的Java库,主要功能是提供汉字到拼音的转换服务,包括声母、韵母、声调等信息。它支持...

    中文转换为拼音java

    使用Pinyin4j,你可以如下所示将中文字符串转换为拼音: ```java import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; ...

Global site tag (gtag.js) - Google Analytics