2

我正在编写一个代码来识别文本中的国家名称。我正在使用带有国家名称的字典说India, America, Sri Lanka, ...。我目前正在使用字典中的text.contains(key)with key。但是,即使对于像Indiana. 我尝试将句子中的单词放在一个数组中,然后进行包含,类似的方法可以考虑使用 equals,但它们真的很慢。你能想到其他更快的方法吗?

4

3 回答 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 回答