Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 忽略String.contain上的符号_Java_Android_Regex_String - Fatal编程技术网

Java 忽略String.contain上的符号

Java 忽略String.contain上的符号,java,android,regex,string,Java,Android,Regex,String,我正在我的应用程序中进行搜索,需要检查我的文本是否包含用户输入的单词 目前我的代码是: if (textToCheck.toLowerCase().contains(input.toLowerCase())) { 这很好用。 但是,我希望我的搜索更加智能,只在字母表上搜索,因此,如果文本包含其他符号(而不是a-z),应用程序将忽略它们: 示例: 如果这是我的文本,这是我的输入,我希望匹配 textToCheck=“搜索将不使用逗号、括号或任何其他符号” input=“使用逗号括号”您可以使用

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

目前我的代码是:

if (textToCheck.toLowerCase().contains(input.toLowerCase())) {
这很好用。 但是,我希望我的搜索更加智能,只在字母表上搜索,因此,如果文本包含其他符号(而不是a-z),应用程序将忽略它们:

示例: 如果这是我的文本,这是我的输入,我希望匹配

textToCheck=“搜索将不使用逗号、括号或任何其他符号”

input=“使用逗号括号”

您可以使用

/**
 * @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方法


方法onlylphabet通过将几个空格减少为一个空格来处理空格,这样,如果用户编写类似“逗号,括号”的内容,就如同他编写“逗号括号”一样,您可以使用正则表达式来实现它。如果你的应用程序只在字母表上搜索,那么使用以下条件即可。以下代码用空格替换所有特殊字符

if (textToCheck.toLowerCase().contains(input.replaceAll("[^a-zA-Z ]", "").toLowerCase())) {

正则表达式也会删除空格@nhahtdh?你的文本是否只包含非重音字母?在上面的示例中,你会在说特殊字符之前和之后获得空格,例如,“,”,就像使用replaceAll(“[^A-Za-z]*”,”)一样,它不会起作用?我的错,更新了示例,文本将只包含一个空格,可能是在符号无法理解您的输入与此处所需的输出之后。是否尝试匹配只包含字母字符的文本?您是否试图在输入中仅匹配字母字符,或仅包含字母字符的单词?我不太清楚。它可以工作,但每次搜索大约需要24秒才能完成(只需1.5-2秒)。我不使用重音字符,但需要13秒才能加载,只需1.5-2秒