我正在编写一个代码来识别文本中的国家名称。我正在使用带有国家名称的字典说India, America, Sri Lanka, ...
。我目前正在使用字典中的text.contains(key)
with key
。但是,即使对于像Indiana
. 我尝试将句子中的单词放在一个数组中,然后进行包含,类似的方法可以考虑使用 equals,但它们真的很慢。你能想到其他更快的方法吗?
问问题
10905 次
3 回答
9
尝试使用单词边界类\b
s.matches(".*\\b" + key + "\\b.*")
于 2013-04-03T05:47:47.863 回答
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
于 2013-04-03T05:54:36.847 回答
0
contains()
应该工作。你也可以试试String.indexOf(String)
。如果它返回 -1 以外的任何值,则该查询字符串存在于所述字符串中,否则不存在。
于 2013-04-03T05:46:29.857 回答