1

我进行了很多搜索,但找不到任何可以让我同时在某些索引处插入单词的东西。例如:我有一个字符串:

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

我对某些单词有一个哈希图,它们在字符串中指示它们的索引:例如:

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

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

我不能使用正则表达式(replaceall 方法),因为有时我会有这样的句子:

岩石是坚硬的。

和哈希图将是:

rock -> 0

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

编辑:对于句子:

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

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

4

1 回答 1

-1

这并不完全符合您的要求,而是将其视为尝试通过不同方式实现目标的替代解决方案。

我会假设两件不同的事情,首先,假设存在 a List<String> words,其中包含您要替换的单词。

然后代码将是:

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

第二种情况,更接近您的示例但不使用索引,假设存在 a 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 回答