2014-10-17 105 views
1

我正在处理我的应用中的某种搜索,并且需要检查我的文本是否包含用户输入的单词。忽略String.contain上的符号

目前我的代码是:

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

这工作完全正常。 不过,我想我的搜索更聪明,只有在字母搜索,所以如果例如文本包含其他符号(而不是亚利桑那州),应用程序将忽略它们:

例如: 如果这是我的文字,这是我的输入,我想要一场比赛。

textToCheck = “搜索不会,逗号,括号,或任何其他标志工作”

输入= “用逗号括号作品”

+0

正则表达式删除空格@nhahtdh? – Blackbelt 2014-10-17 10:32:36

+0

你的文本是否只包含非加重字母? – fge 2014-10-17 10:36:14

+0

是你要在上面的例子中说出特殊字符(即''')之前和之后的空格,因为即使使用replaceAll(“[^ A-Za-z] *”,“”)它不会起作用? – SMA 2014-10-17 10:36:51

回答

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通过将多个空格减少到只有一个空格来处理空间,这样,如果用户写入“逗号,括号”之类的东西,它就像他会写“逗号括号”一样

+0

它可以工作,但每次搜索都需要24秒钟才能完成(在它只需要1.5-2秒之前)p.s我不使用加重字符 – james 2014-10-17 12:01:38

0

你可以通过使用正则表达式来实现它。如果你的应用只搜索字母,然后使用下面的条件,如果它会工作。以下代码用空格替换所有特殊字符。

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

工作,但需要13秒加载,然后花费1.5-2秒 – james 2014-10-17 12:09:46