テキスト内の国名を見つけるコードを書いています。と言う国名の辞書を使っていますIndia, America, Sri Lanka, ...
。私は現在、辞書から使用text.contains(key)
しています。key
ただし、これは のような文字列に対しても true を返しますIndiana
。私は文の単語を配列に入れてからcontainsを実行しようとしました.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 に答える