我正在编写一个代码来在文本中找到国家/地区名称。我使用的是一个国家名称为India, America, Sri Lanka, ...
的字典。我目前正在使用text.contains(key)
和词典中的key
。但是,即使对于Indiana
这样的字符串,也会返回true。我尝试将句子的单词放在数组中,然后进行包含,类似的方法可以用equals来考虑,但它们真的很慢。还有其他更快的方法可以想到吗?
答案 0 :(得分:9)
尝试使用word boundary课程\b
s.matches(".*\\b" + key + "\\b.*")
答案 1 :(得分:1)
也许你应该使用一些文本处理库。
这是一个正则表达式解决方案:
import java.util.regex.*;
import static java.lang.System.*;
public class SO {
public static void main(String[] args) {
String[] dict={"india","america"};
String patStr=".*\\b(" + combine(dict,"|") + ")\\b.*";
out.println("pattern: "+patStr+"\n");
Pattern pat=Pattern.compile(patStr);
String input1="hello world india indiana";
out.println(input1+"\t"+pat.matcher(input1).matches());
String input2="hello world america americana";
out.println(input2+"\t"+pat.matcher(input2).matches());
String input3="hello world indiana amercana";
out.println(input3+"\t"+pat.matcher(input3).matches());
}
static String combine(String[] s, String glue){
int k=s.length;
if (k==0) return null;
StringBuilder out=new StringBuilder();
out.append(s[0]);
for (int x=1;x<k;++x)
out.append(glue).append(s[x]);
return out.toString();
}
}
输出:
pattern: .*\b(india|america)\b.*
hello world india indiana true
hello world america americana true
hello world indiana amercana false
答案 2 :(得分:0)
contains()
应该有效。您也可以尝试String.indexOf(String)
。如果它返回-1以外的任何值,则该查询字符串存在于所述String中,否则不存在。