/**
   * * 将名字转化为拼音并获得首字母
   *
   * @param name
   * @return
   */
  public String getSortLetter(String name) {
    String letter = "#";
    if (name == null) {
      return letter;
    }
    // 汉字转换成拼音
    String pinyin = characterParser.getSelling(name);
    String sortString = pinyin.substring(0, 1).toUpperCase(Locale.CHINESE);

    // 正则表达式,判断首字母是否是英文字母
    if (sortString.matches("[A-Z]")) {
      letter = sortString.toUpperCase(Locale.CHINESE);
    }
    return letter;
  }
/**
 * 取姓名首字母及模糊匹配查询
 *
 * <p>类详细描述
 *
 * @author duanbokan
 */
public class GetCountryNameSort {

  CharacterParserUtil characterParser = CharacterParserUtil.getInstance();

  String chReg = "[\\u4E00-\\u9FA5]+"; // 中文字符串匹配

  /**
   * * 将名字转化为拼音并获得首字母
   *
   * @param name
   * @return
   */
  public String getSortLetter(String name) {
    String letter = "#";
    if (name == null) {
      return letter;
    }
    // 汉字转换成拼音
    String pinyin = characterParser.getSelling(name);
    String sortString = pinyin.substring(0, 1).toUpperCase(Locale.CHINESE);

    // 正则表达式,判断首字母是否是英文字母
    if (sortString.matches("[A-Z]")) {
      letter = sortString.toUpperCase(Locale.CHINESE);
    }
    return letter;
  }

  /**
   * * 取首字母
   *
   * @param sortKey
   * @return
   */
  public String getSortLetterBySortKey(String sortKey) {
    if (sortKey == null || "".equals(sortKey.trim())) {
      return null;
    }
    String letter = "#";
    // 汉字转换成拼音
    String sortString = sortKey.trim().substring(0, 1).toUpperCase(Locale.CHINESE);
    // 正则表达式,判断首字母是否是英文字母
    if (sortString.matches("[A-Z]")) {
      letter = sortString.toUpperCase(Locale.CHINESE);
    }
    return letter;
  }

  /**
   * * 根据输入内容进行查询
   *
   * @param str 输入内容
   * @param list 需要查询的List
   * @return 查询结果
   */
  public List<CountrySortModel> search(String str, List<CountrySortModel> list) {
    List<CountrySortModel> filterList = new ArrayList<CountrySortModel>(); // 过滤后的list
    // if (str.matches("^([0-9]|[/+])*$")) {// 正则表达式 匹配号码
    if (str.matches("^([0-9]|[/+]).*")) { // 正则表达式 匹配以数字或者加号开头的字符串(包括了带空格及-分割的号码)
      String simpleStr = str.replaceAll("\\-|\\s", "");
      for (CountrySortModel contact : list) {
        if (contact.countryName != null && contact.countryName != null) {
          if (contact.simpleCountryNumber.contains(simpleStr)
              || contact.countryName.contains(str)) {
            if (!filterList.contains(contact)) {
              filterList.add(contact);
            }
          }
        }
      }
    } else {
      for (CountrySortModel contact : list) {
        if (contact.countryNumber != null && contact.countryName != null) {
          // 姓名全匹配,姓名首字母简拼匹配,姓名全字母匹配
          if (contact
                  .countryName
                  .toLowerCase(Locale.CHINESE)
                  .contains(str.toLowerCase(Locale.CHINESE))
              || contact
                  .countrySortKey
                  .toLowerCase(Locale.CHINESE)
                  .replace(" ", "")
                  .contains(str.toLowerCase(Locale.CHINESE))
              || contact
                  .sortToken
                  .simpleSpell
                  .toLowerCase(Locale.CHINESE)
                  .contains(str.toLowerCase(Locale.CHINESE))
              || contact
                  .sortToken
                  .wholeSpell
                  .toLowerCase(Locale.CHINESE)
                  .contains(str.toLowerCase(Locale.CHINESE))) {
            if (!filterList.contains(contact)) {
              filterList.add(contact);
            }
          }
        }
      }
    }
    return filterList;
  }
}