0

find all the substring私はその1つの文字列をしたいですcontains a key word

例: 「これはkeyword文字列の中にあります」。

出力: キーワード、これはキーワード、文字列内のキーワード、... 内のキーワードです。

最初にすべての部分文字列を見つけてから、1つずつフィルタリングしようと考えています。しかし、それは非常に悪い解決策になると思います。

そのためのアドバイスをお願いします。どうもありがとうございました。

トークンのシーケンスを見つけるだけに編集しました。

4

2 に答える 2

2

これを試して:

String str = "abcdefkeybncv...";
String key = "key";
int index = str.indexOf(key);
ArrayList<String> sub = new ArrayList<String>();
for (int i = 0; i < str.length(); i++) {
    for (int j = 0; j <= str.length() - i; j++) {
        String s = str.substring(i, i+j);
        if(s.indexOf(key) >= 0){
            sub.add(s);
        }
    }
}
System.out.println(sub);

上記のコードの出力:

[abcdefkey, abcdefkeyb, abcdefkeybn, abcdefkeybnc, abcdefkeybncv, abcdefkeybncv., abcdefkeybncv.., abcdefkeybncv..., bcdefkey, bcdefkeyb, bcdefkeybn, bcdefkeybnc, bcdefkeybncv, bcdefkeybncv., bcdefkeybncv.., bcdefkeybncv..., cdefkey, cdefkeyb, cdefkeybn, cdefkeybnc, cdefkeybncv, cdefkeybncv., cdefkeybncv.., cdefkeybncv..., defkey, defkeyb, defkeybn, defkeybnc, defkeybncv, defkeybncv., defkeybncv.., defkeybncv..., efkey, efkeyb, efkeybn, efkeybnc, efkeybncv, efkeybncv., efkeybncv.., efkeybncv..., fkey, fkeyb, fkeybn, fkeybnc, fkeybncv, fkeybncv., fkeybncv.., fkeybncv..., key, keyb, keybn, keybnc, keybncv, keybncv., keybncv.., keybncv...]
于 2013-08-21T18:57:11.343 に答える
0
  1. 接尾辞配列の構築: http://en.wikipedia.org/wiki/Suffix_array
  2. 二分探索を使用して、そこにある部分文字列を見つけます
  3. 接尾辞が部分文字列で始まる間、接尾辞配列内のこのポイントから上下に移動します
于 2013-08-21T19:21:03.177 に答える