-2
我想实现T9到我的android dialer。但它滞后。我检查并生成可能的组合列表是无痛的。T9算法太慢
但我想用一个模式来匹配和我产生的模式如下
Pattern queryPattern;
List<String> names = T9Utils.possibleNames(query);
StringBuilder sb = new StringBuilder();
for (String name : names) {
Matcher m = p.matcher(name.toLowerCase());
sb.append("(");
sb.append(m.replaceAll("($0)\\s*"));
sb.append(")");
if (!name.equals(names.get(names.size() - 1))) {
sb.append("|");
}
}
queryPattern = Pattern.compile("(?i).*(" + sb.toString() + ").*");
for (CallLogItem contact : allContacts) {
Matcher nameM = queryPattern.matcher(contact.displayName);
Matcher phoneM = queryPattern.matcher(contact.phoneNumber);
if (nameM.matches()) {
//TODO: Highlighting
toBeDisplayed.add(contact);
} else if (phoneM.matches()) {
toBeDisplayed.add(contact);
}
}
产生会像
(?i).*(((g)\\s*(d)\\s*)|((g)\\s*(e)\\s*)|((g)\\s*(f)\\s*)|((g)\\s*(3)\\s*)|((h)\\s*(d)\\s*)|((h)\\s*(e)\\s*)|((h)\\s*(f)\\s*)|((h)\\s*(3)\\s*)|((i)\\s*(d)\\s*)|((i)\\s*(e)\\s*)|((i)\\s*(f)\\s*)|((i)\\s*(3)\\s*)|((4)\\s*(d)\\s*)|((4)\\s*(e)\\s*)|((4)\\s*(f)\\s*)|((4)\\s*(3)\\s*)).*
为什么我下投得更快!告诉我,让我下次更好! –