zoukankan      html  css  js  c++  java
  • 汉字转汉语拼音工具类

    需求:汉字名称字段转换为汉语拼音字段,以支持拼音模糊搜索。

    转汉语拼音实现:依赖 pinyin4j 相关 jar 包

    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 PinyinUtils {
    
    	/**
    	 * 获得汉语拼音首字母
    	 *
    	 * @param chines
    	 *           汉字
    	 * @return
    	 */
    	public static String getAlpha(String chines) {
    		String pinyinName = "";
    		char[] nameChar = chines.toCharArray();
    		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    		defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
    		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    		for (int i = 0; i < nameChar.length; i++) {
    			if (nameChar[i] > 128) {
    				try {
    					String[] temp = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat);
    					if(temp.length>0) pinyinName += temp[0].charAt(0);
    //	                pinyinName += PinyinHelper.toHanyuPinyinStringArray(
    //	                     nameChar[i], defaultFormat)[0].charAt(0);
    				} catch (BadHanyuPinyinOutputFormatCombination e) {
    					e.printStackTrace();
    				}
    			} else {
    				pinyinName += nameChar[i];
    			}
    		}
    		return pinyinName;
    	}
    	
    	/**
    	 * 将字符串中的中文转化为拼音,英文字符不变
    	 *
    	 * @param inputString
    	 *           汉字
    	 * @return
    	 */
    	public static String getPingYin(String inputString) {
    		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
    		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    		format.setVCharType(HanyuPinyinVCharType.WITH_V);
    		String output = "";
    		if (inputString != null && inputString.length() > 0
    	            && !"null".equals(inputString)) {
    			char[] input = inputString.trim().toCharArray();
    			try {
    				for (int i = 0; i < input.length; i++) {
    					if (java.lang.Character.toString(input[i]).matches(
    	                     "[\u4E00-\u9FA5]+")) {
    						String[] temp = PinyinHelper.toHanyuPinyinStringArray(
    	                        input[i], format);
    						output += temp[0];
    					} else
    						output += java.lang.Character.toString(input[i]);
    				}
    			} catch (BadHanyuPinyinOutputFormatCombination e) {
    				e.printStackTrace();
    			}
    		} else {
    			return "*";
    		}
    		return output;
    	}
    
    	/**
    	 * 汉字转换位汉语拼音首字母,英文字符不变
    	 *
    	 * @param chines
    	 *           汉字
    	 * @return 拼音
    	 */
    	public static String converterToFirstSpell(String chines) {
    		String pinyinName = "";
    		char[] nameChar = chines.toCharArray();
    		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    		defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
    		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    		for (int i = 0; i < nameChar.length; i++) {
    			if (nameChar[i] > 128) {
    				try {
    					String[] temp = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat);
    					if(temp.length>0) pinyinName += temp[0].charAt(0);
    				} catch (BadHanyuPinyinOutputFormatCombination e) {
    					e.printStackTrace();
    				}
    			} else {
    				pinyinName += nameChar[i];
    			}
    		}
    		return pinyinName;
    	}
    	static public void main(String argv[]) {
    		String strs = PinyinUtils.getPingYin("新年好!Hello,新年大家都过得开心吧?哈哈,我是做Android开发哒,what's this?");
    		System.out.println(strs);
    		String strs1 = PinyinUtils.getAlpha("新年好!Hello,新年大家都过得开心吧?哈哈,我是做Android开发哒,what's this?");
    		System.out.println(strs1);
    		String strs2 = PinyinUtils.converterToFirstSpell("新年好!Hello,新年大家都过得开心吧?哈哈,我是做Android开发哒,what's this?");
    		System.out.println(strs2);
    	}
    }
  • 相关阅读:
    acm课程练习2--1002
    acm课程练习2--1001
    SDAU课程练习--problemQ(1016)
    SDAU课程练习--problemG(1006)
    SDAU课程练习--problemO(1014)
    SDAU课程练习--problemB(1001)
    SDAU课程练习--problemA(1000)
    SDAU课程练习--problemC
    SDAU课程练习--problemE
    不安全函数(转)
  • 原文地址:https://www.cnblogs.com/pengguozhen/p/14028398.html
Copyright © 2011-2022 走看看