字符串操作:同时在字符串中的某些索引处插入单词

时间:2013-07-23 20:24:35

标签: java string replace

我搜索了很多但找不到任何能让我同时在某些索引处插入单词的内容。例如 : 我有一个字符串:

  攀岩很有趣,我喜欢攀岩。

对于某些单词,我有一个hashmap,表明它们在字符串中的索引: 例如:

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

现在我的问题是: 我想把[start]标签放在所有这些单词的开头,将[end]标签放在它们的末尾,在字符串中。我不能一个接一个地做这个,因为在那种情况下,一旦我在索引0处插入[start],那么所有其他索引都将被修改,我将不得不重新计算它们。 有没有办法可以一次插入所有标签?有人可以为这个问题提出其他解决方案吗?

我不能使用正则表达式(replaceall方法),因为有时候我会有一句话:

  岩石很难。

和hashmap将是:

rock -> 0

我在这里寻找更快的解决方案。

编辑: 对于这句话:

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

这里我不想用标签替换连衣裙。

1 个答案:

答案 0 :(得分:-1)

这并不完全符合您的要求,但请将此视为另一种尝试通过不同方式实现目标的解决方案。

我假设有两个不同的东西,首先,假设存在List<String> words,其中包含您要替换的单词。

然后代码将是:

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

第二种情况,更接近你的例子,但没有使用索引,假设存在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;
}

后者肯定更复杂,甚至不使用索引,所以最好将它重写为前者。

希望这可以帮助您而不必担心指数。