Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串操作:在字符串中的某些索引处同时插入单词_Java_String_Replace - Fatal编程技术网

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

Java 字符串操作:在字符串中的某些索引处同时插入单词,java,string,replace,Java,String,Replace,我已经搜索了很多,但找不到任何可以同时在某些索引中插入单词的内容。例如: 我有一个字符串: 攀岩很有趣,我喜欢攀岩 我有一个特定单词的hashmap,它指示字符串中的索引: e、 g: 现在我的问题是: 我想把[start]标记放在所有这些单词的开头,把[end]标记放在字符串的末尾。我不能一个接一个地这样做,因为在这种情况下,一旦我在索引0处插入[start],那么所有其他索引都将被修改,我将不得不重新计算它们。 有没有一种方法可以让我一次插入所有的标签?有人能提出解决这个问题的其他办法吗 我

我已经搜索了很多,但找不到任何可以同时在某些索引中插入单词的内容。例如: 我有一个字符串:

攀岩很有趣,我喜欢攀岩

我有一个特定单词的hashmap,它指示字符串中的索引: e、 g:

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

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

岩石是硬的

hashmap将是:

rock -> 0
我在这里寻找更快的解决方案

编辑: 关于这句话:

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

<>这里我不想用标签替换Frckes。

< P>这不是你想做的,而是把它看作是通过不同的方法来实现你的目标的另一种解决方案。 我将假设两件不同的事情,首先,假设存在一个
单词列表
,其中包含要替换的单词

那么代码将是:

public String insertTags(final String input) {
    for (String word : words) {
        input.replace(word, "[start]" + word + "[end]");
    }
    return input;
}
第二种情况更接近您的示例,但不使用索引,假设存在一个
映射
,其中包含单词和索引,以在列表表示中替换它们

那么代码就是:

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;
}
publicstringinserttags(最终字符串输入){
for(Map.Entry:words.entrySet()){
String word=entry.getKey();
输入.替换(字,“[start]”+word+“[end]”);
}
返回输入;
}
后者肯定更复杂,甚至不使用索引,因此最好将其重写为前者


希望这有助于您不必担心索引。

首先插入最新的索引,然后在最后为所有地图内容重新计算1个索引。或者,构造一个新字符串,边插入标记边记录重要的索引。为什么不能使用正则表达式替换所有索引?你对岩石的预期产量最终会是多少?你为什么要保存这些指数?你不能在找到单词的步骤中插入标记吗?@NolanPower:我可以对给定的示例使用正则表达式,但我不能将它们用于诸如“连衣裙很漂亮”之类的内容。我不想在这句话中替换rock。基本上,我想检查一下这些指数是否有意义use@Keppil当前位置每当收到句子时,我都会查找单词及其索引。那一次我不知道hashmap。hashmap是稍后从收到的查询中形成的。这也是通过replace函数使用正则表达式。如果我真的决定使用它,我将不得不写一个复杂的。e、 g:以我最近的编辑为例。在这种情况下,您的代码也将替换上衣中的rock。@tejas啊,那么我很抱歉,但您一开始还没有提到这一点。然而,它仍然可以通过正则表达式来实现:例如,你只能在某个空格之前替换某个空格,或者在它之后替换某个空格,等等。然而,为了获得最佳答案,你需要知道所有可能发生的情况以及你想如何处理它们。是的,我不知道会发生的所有情况。这就是问题所在。这就是为什么我试图通过指数来解决这个问题。
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;
}