1

たくさん検索しましたが、特定のインデックスに単語を同時に挿入できるものは見つかりませんでした。例:私は文字列を持っています:

ロッククライミングは楽しいです、私はロッククライミングが大好きです。

文字列内のインデックスを示す特定の単語のハッシュマップがあります:例:

rock -> 0,29
climbing -> 5,34
fun -> 17

ここで私の質問は: [start] タグをこれらすべての単語の先頭に配置し、[end] タグを文字列の末尾に配置したいと考えています。その場合、[start] をインデックス 0 に挿入すると、他のすべてのインデックスが変更され、再計算する必要があるため、これを 1 つずつ行うことはできません。すべてのタグを一度に挿入できる方法はありますか? 誰かがこの問題に対する他の解決策を提案できますか?

次のような文が時々あるため、正規表現(replaceallメソッド)を使用できません。

岩は硬いです。

ハッシュマップは次のようになります。

rock -> 0

ここでより高速なソリューションを探しています。

編集 : 文の場合 :

rocks are hard but frocks are beautiful.
rocks -> 0

ここでは、フロックをタグに置き換えたくありません。

4

1 に答える 1

-1

これはまさにあなたが望んでいることではありませんが、これを別の手段で目標を達成しようとする代替ソリューションと考えてください。

List<String> wordsまず、置換したい単語を含むが存在するとします。

次に、コードは次のようになります。

public String insertTags(final String input) {
    for (String word : words) {
        input.replace(word, "[start]" + word + "[end]");
    }
    return input;
}

2番目のケースは、例に近いがインデックスを使用していない場合、Map<String, List<Integer>>リスト表現で単語とそれらを置き換えるインデックスを含む が存在するとします。

次に、コードは次のようになります。

public String insertTags(final String input) {
    for (Map.Entry<String, List<Integer>> entry : words.entrySet()) {
        String word = entry.getKey();
        input.replace(word, "[start]" + word + "[end]");
    }
    return input;
}

後者は間違いなくより複雑であり、インデックスも使用しないため、できれば前者に書き直す必要があります。

インデックスについて心配することなく、これが役立つことを願っています。

于 2013-07-23T20:43:35.373 に答える