对中英文混合的用户名称,按中文和英文分割为list列表
·需求:
由于需要实现模糊搜索用户功能,其中需要把各种类型(全中文,全英文,中英混合等)的名称,都转化为英文(拼音)方便匹配。
如
“欧阳永叔叔”、“欧yangYong叔叔”、“ou阳永叔shu”、“@欧,yang|yong叔(叔)” -> [ou, yang, yong, shu, shu]
“Jack马”-> [jack, ma]
“Taylor·J·张” -> [taylor, j, zhang]
·难点
中英混合名称的转化
·代码实现:
public static List<String> getFullName(String name) { List<String> list = new ArrayList<>(); char[] names = name.toCharArray(); StringBuilder sb = new StringBuilder(); int index = 0; for (int i = 0; i < names.length; i++) { String pinYin = PinyinHelper.getPinYin(names[i]); //如果为null,说明该字符不是汉字 if (pinYin != null) { if (!TextUtils.isEmpty(sb)) { list.add(sb.toString()); } sb.delete(0, sb.length()); list.add(pinYin); index = i + 1; } else if (Character.toString(names[i]).matches("[a-z]")) { if (index == i) { sb.delete(0, sb.length()); } sb.append(names[i]); if (i == names.length - 1) { list.add(sb.toString()); } } else if (Character.toString(names[i]).matches("[A-Z]")) { if (!TextUtils.isEmpty(sb)) { list.add(sb.toString()); } sb.delete(0, sb.length()); sb.append(Character.toString(names[i]).toLowerCase()); } else { index = i + 1; } } return list; }
·注意:
类似“欧yangyong叔叔”、“欧Yangyong叔叔”会被转化为[ou, yangyong, shu, shu]