package com.netease.nim.uikit.contact.core.query; public class SimpleT9Matcher { private static final char[] LATIN_LETTERS_TO_DIGITS = { '2', '2', '2', // A,B,C -> 2 '3', '3', '3', // D,E,F -> 3 '4', '4', '4', // G,H,I -> 4 '5', '5', '5', // J,K,L -> 5 '6', '6', '6', // M,N,O -> 6 '7', '7', '7', '7', // P,Q,R,S -> 7 '8', '8', '8', // T,U,V -> 8 '9', '9', '9', '9' // W,X,Y,Z -> 9 }; private static boolean isAlphaNumberString(String name) { return name.matches("[0-9a-zA-Z]+"); } private static char getDialpadNumericCharacter(char ch) { if(ch >= 'A' && ch <= 'Z'){ ch = (char) (ch + ('a' - 'A')); } if (ch >= 'a' && ch <= 'z') { return LATIN_LETTERS_TO_DIGITS[ch - 'a']; } return ch; } /** * 将仅包含数字和字母的字符串转化为数字串(对应T9) * @param name * @return */ private static String alphaNumberStringToNumbericString(String name){ if(isAlphaNumberString(name)){ final int length = name.length(); StringBuilder builder = new StringBuilder(); for (int index = 0; index < length ; index++){ builder.append(getDialpadNumericCharacter(name.charAt(index))); } return builder.toString(); } return ""; } public static boolean hit(String text,String query){ return alphaNumberStringToNumbericString(text).contains(query); } }