我必须在文本文件中查找单词“age”和类似单词。
我有以下句子:
String.contains在每种情况下都会返回true。我的要求是传递前五个句子,并在最后一种情况下返回false。
我将通过编写一些包含一串字符串“age”,“age”的代码来解决这个问题。 ,“年龄”,“年龄”,“年龄”等。
有没有更好的方法来解决这个问题。
答案 0 :(得分:3)
如果你使用正则表达式,你必须把所有可能性。
string.matches("(?i).*\\bage[ds]?\\b.*");
答案 1 :(得分:1)
一个天真的解决方案(昂贵的)将是以下:
两个字符串的编辑距离是使一个字符串等于另一个字符串所需的编辑(添加,删除和替换)的数量。您可以在simmetrics库中找到编辑距离的实现,也可以在其他地方找到。
另一个选择可能是阻止第2步中的单词并使用包含单词age的词干(也很昂贵)。
如果您已经知道所有可接受的答案(或至少是他们的模式),请转到Avinash Raj's answer。
答案 2 :(得分:1)
您需要的是一个正则表达式(或正则表达式)
Here's正则表达式的完全详细定义和Java中的使用,可以使用matches(String Regex) method of String class完成。
对于您的示例,它可以(通常)为:myString.matches(".*age? .*")
。
注意在Java中转义特殊字符。您可以尝试使用正则表达式here。我在上面的示例中没有这样做,但您可以尝试:)
详细说明:
希望它有所帮助。