我正在我的应用中进行搜索,需要检查我的文字是否包含用户输入的字词。
目前我的代码是:
if (textToCheck.toLowerCase().contains(input.toLowerCase())) {
哪个效果很好。 但是,我希望我的搜索更聪明,并且只搜索字母表,所以如果例如文本包含其他符号(而不是a-z),应用程序将忽略它们:
示例: 如果这是我的文字,这是我的输入,我想要一个匹配。
textToCheck =“搜索无法使用,逗号,括号或任何其他符号”
input =“使用逗号括号”
答案 0 :(得分:0)
您可以使用
/**
* @param s
* @return s without accented characters
* @see http://stackoverflow.com/questions/15190656/easy-way-to-remove-utf-8-accents-from-a-string
*/
private static String stripAccents(String s) {
String s1 = Normalizer.normalize(s, Normalizer.Form.NFD);
s1 = s1.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
return s1;
}
private static String onlyAlphabet (String string){
return stripAccents(string)
// deletes anything not letter or space
.replaceAll("[^A-Za-z\\s]", "")
// converts chains of blanks in single spaces
.replaceAll("\\s{2,}", " ")
// gets lower case
.toLowerCase();
}
public static boolean find(String textToBeSearched, String input){
String normalizedWhole = onlyAlphabet(textToBeSearched);
String normalizedInput = onlyAlphabet(input);
return normalizedWhole.contains(normalizedInput);
}
如果您不想获得突出的字符,可以跳过stripAccents方法。
方法onlyAlphabet通过将几个空格减少到只有一个空间来处理空间,这样,如果用户写了类似"逗号,括号和#34;之类的东西,它就像他会有的一样书面"逗号括号"
答案 1 :(得分:0)
您可以使用正则表达式来实现它。如果您的应用仅在Alphabets上搜索,则使用以下if条件它将起作用。以下代码用空格替换所有特殊字符。
if (textToCheck.toLowerCase().contains(input.replaceAll("[^a-zA-Z ]", "").toLowerCase())) {