zoukankan      html  css  js  c++  java
  • 拼音工具类源码



    **部分内容参考链接:**

    chaychan



    一、获取拼音的方法

    public static String getPinyin(String str) {
            // 设置拼音结果的格式
            HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
            format.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 设置为大写形式
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不用加入声调
    
            StringBuilder sb = new StringBuilder();
    
            char[] charArray = str.toCharArray();
    
            for (int i = 0; i < charArray.length; i++) {
                char c = charArray[i];
    
                if (Character.isWhitespace(c)) {// 如果是空格则跳过
                    continue;
                }
    
                if (isHanZi(c)) {// 如果是汉字
                    String s = "";
                    try {
                        if (i == 0){
                            //如果是第一个,则使用获取姓氏
                            s = getSurnamePinyin(String.valueOf(c));
                        }else{
                            // toHanyuPinyinStringArray 返回一个字符串数组是因为该汉字可能是多音字,此处只取第一个结果
                            s = PinyinHelper.toHanyuPinyinStringArray(c, format)[0];
                        }
                        sb.append(s);
                    } catch (BadHanyuPinyinOutputFormatCombination e) {
                        e.printStackTrace();
                        sb.append(s);
                    }
    
                } else {
                    // 不是汉字
                    if (i == 0) {
                        if (isEnglish(c)) {// 第一个属于字母,则返回该字母
                            return String.valueOf(c).toUpperCase(Locale.ENGLISH);
                        }
                        return "#"; // 不是的话返回#号
                    }
                }
            }
    
            return sb.toString();
        }
    

    主要的逻辑是,将字符串拆解成字符数组,遍历每个字符:

    1. 如果第一个是汉字,则获取调用getSurnamePinyin()方法,获取其对应的拼音,这个方法主要是对姓氏的处理;
    2. 如果第一个字符是英文,则直接返回该字符的大写;
    3. 如果第一个字符不是汉字也不是英文,则直接返回"#"号;

    二、如何判断是否是汉字

    public static boolean isHanZi(char c) {
            Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]+");
            Matcher matcher = pattern.matcher(String.valueOf(c));
            return matcher.matches();
        }
    

    使用正则表达式匹配,如果满足,则说明是汉字,返回true。

    三、如何判断是否是英文

    public static boolean isEnglish(char c) {
        return String.valueOf(c).matches("^[a-zA-Z]*");
     }
    

    四、获取姓氏的拼音

        public static String getSurnamePinyin(CharSequence name) {
            if (name == null || name.length() == 0) return null;
            char ch = name.charAt(0);
            if (surnames.containsKey(ch)) {
                String s = surnames.get(ch);
                return s.toUpperCase(Locale.ENGLISH);
            }
            if (ch >= 0x4E00 && ch <= 0x9FA5) {
                int sp = (ch - 0x4E00) * 6;
                return pinyinTable.substring(sp, sp + 6).trim().toUpperCase(Locale.ENGLISH);
            } else {
                return String.valueOf(ch).toUpperCase(Locale.ENGLISH);
            }
        }
    
    

    五、将汉字转换为全拼

    public static String getPinYin(String src) {
    		char[] t1 = null;
    		t1 = src.toCharArray();
    		// System.out.println(t1.length);
    		String[] t2 ;
    		// System.out.println(t2.length);
    		// 设置汉字拼音输出的格式
    		HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
    		t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    		t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    		t3.setVCharType(HanyuPinyinVCharType.WITH_V);
    		String t4 = "";
    		int t0 = t1.length;
    		try {
    			for (int i = 0; i < t0; i++) {
    				// 判断是否为汉字字符
    				// System.out.println(t1[i]);
    				if (Character.toString(t1[i]).matches("[\u4E00-\u9FA5]+")) {
    					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
    					t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
    				} else {
    					// 如果不是汉字字符,直接取出字符并连接到字符串t4后
    					t4 += Character.toString(t1[i]);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return t4;
    	}
    

    六、获取汉字串拼音首字母,英文字符不变

    /**  
    	 * 获取汉字串拼音首字母,英文字符不变  
    	 * @param chinese 汉字串  
    	 * @return 汉语拼音首字母  
    	 */
    	public static String getFirstSpell(String chinese) {
    		if (chinese == null || chinese.trim().equalsIgnoreCase("")) {
    			return "";
    		}
    		StringBuffer pybf = new StringBuffer();
    		char[] arr = chinese.toCharArray();
    		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    		for (int i = 0; i < arr.length; i++) {
    			if (arr[i] > 128) {
    				try {
    					String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
    					if (temp != null) {
    						pybf.append(temp[0].charAt(0));
    					}
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			} else {
    				pybf.append(arr[i]);
    			}
    		}
    		return pybf.toString().replaceAll("\W", "").trim();
    	}
    
  • 相关阅读:
    【scala】定义变量和函数
    【python】self用法详解
    【Hive】自定义函数
    【Java】抽象类和接口
    Linux中的wheel用户组是什么?
    CentOS6.9切换root用户su root输入正确密码后一直提示Incorrect password,如何解决?
    CentOS7.X中使用yum安装nginx的方法
    Win10提示“因为文件共享不安全,所以你不能连接到文件共享”如何处理
    vim编辑器-多行加注释与去注释
    CentOS7.4用yum安装并配置MySQL5.7
  • 原文地址:https://www.cnblogs.com/aixing/p/13327547.html
Copyright © 2011-2022 走看看