通讯录中实现汉字转换为汉语拼音并排序

本人最近做了通讯录的姓名转换为汉语拼音,并对姓名进行有序排序的功能,此篇博客依赖的是第三方jar包,如果想实现此功能可以在网上下载。希望这篇博客对各位有帮助。

以下实体类都是在第三方jar包下导入,请认真核对,如有不同,就是jar包下载有误。本人刚开始用时也出现过这个问题,再次只做提醒。

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;

/**
* 汉字转换为汉语拼音,英文字符不变
*/
public class Cn2Spell {

  public static StringBuffer sb = new StringBuffer();

  /**
  * 获取汉字字符串的首字母,英文字符不变
  * 例如:阿飞→af
  */
  public static String getPinYinHeadChar(String chines) {
    sb.setLength(0);
    char[] chars = chines.toCharArray();
    HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    for (int i = 0; i < chars.length; i++) {
      if (chars[i] > 128) {
        try {
          sb.append(PinyinHelper.toHanyuPinyinStringArray(chars[i], defaultFormat)[0].charAt(0));
        } catch (Exception e) {
          e.printStackTrace();
        }
      } else {
        sb.append(chars[i]);
      }
    }
    return sb.toString();
  }

  /**
  * 获取汉字字符串的第一个字母
  */
  public static String getPinYinFirstLetter(String str) {
    sb.setLength(0);
    char c = str.charAt(0);
    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
    if (pinyinArray != null) {
      sb.append(pinyinArray[0].charAt(0));
    } else {
      sb.append(c);
    }
    return sb.toString();
  }

  /**
  * 获取汉字字符串的汉语拼音,英文字符不变
  */
  public static String getPinYin(String chines) {
    sb.setLength(0);
    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 {
          sb.append(PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0]);
        } catch (Exception e) {
          e.printStackTrace();
        }
      } else {
        sb.append(nameChar[i]);
      }
    }
    return sb.toString();
  }
}

原文地址:https://www.cnblogs.com/jiww/p/6509075.html