使用Java在句子中找到确切的单词

时间:2013-04-03 05:38:05

标签: java string

我正在编写一个代码来在文本中找到国家/地区名称。我使用的是一个国家名称为India, America, Sri Lanka, ...的字典。我目前正在使用text.contains(key)和词典中的key。但是,即使对于Indiana这样的字符串,也会返回true。我尝试将句子的单词放在数组中,然后进行包含,类似的方法可以用equals来考虑,但它们真的很慢。还有其他更快的方法可以想到吗?

3 个答案:

答案 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中,否则不存在。