忽略String.contain上的符号

时间:2014-10-17 10:29:13

标签: java android regex string

我正在我的应用中进行搜索,需要检查我的文字是否包含用户输入的字词。

目前我的代码是:

if (textToCheck.toLowerCase().contains(input.toLowerCase())) {

哪个效果很好。 但是,我希望我的搜索更聪明,并且只搜索字母表,所以如果例如文本包含其他符号(而不是a-z),应用程序将忽略它们:

示例: 如果这是我的文字,这是我的输入,我想要一个匹配。

textToCheck =“搜索无法使用,逗号,括号或任何其他符号”

input =“使用逗号括号”

2 个答案:

答案 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())) {