在特定索引处嵌入文本内的单词

时间:2013-05-23 23:27:54

标签: java regex

我有一个文字,我想在特定索引的文本中加入一个单词。我设法找到了我需要包含新单词的文本索引。但是,我找不到将该索引用于嵌入过程的方法。我尝试使用replace函数如下:

newSentence = oldSentence.replace(oldWord, (oldWord+" "+newWord));

问题是这个方法替换了所有出现的oldWord,而我只希望改变特定索引处的单词。

我感谢任何建议

4 个答案:

答案 0 :(得分:2)

您可以使用StringBuilder#replace()。它可以替换给定String的一部分,如下所示:

StringBuilder sb = new StringBuilder(oldSentence);
sb.replace(wordPos, newWord.length()-1, newWord);
newSentence = sb.toString();

来自javadoc

public StringBuilder replace(int start,
                    int end,
                    String str)
  

使用指定String中的字符替换此序列的子字符串中的字符。子字符串从指定的开始处开始并延伸到索引结束处的字符 - 1或如果不存在此类字符则延伸到序列的结尾。首先删除子字符串中的字符,然后在start处插入指定的String。 (如果需要,将延长此序列以容纳指定的字符串。)

答案 1 :(得分:1)

在Java中,您无法更改String的内容。

您必须通过提取要替换的单词之前的文本和单词之后的文本,并在新的String中连接所有三个(之前,之后,之后)来构建一个新文本。查看StringBuilder库类。

StringBuilder buf = new StringBuilder();
buf.append(oldSentence.substring(0,wordPos));
buf.append(newWord);
buf.append(oldSentence.substring(wordPos+oldWordLength));

答案 2 :(得分:1)

oldWord.substring(0, index) + embeddedText + oldWord.substring(index);

这假设您的索引值是您想要嵌入文本的第n个字符。

答案 3 :(得分:1)

您可以使用replaceFirst(),但为了安全起见,您应该将文本转换为正则表达式引用的字符串,以防“word”包含任何sprcial正则表达式字符(如点):

newSentence = oldSentence.replaceFirst(Pattern.quote(oldWord), oldWord+" "+newWord);

或稍微“regexy”,将wird转变为后视:

newSentence = oldSentence.replaceFirst("(?<="Pattern.quote(oldWord)+")", " "+newWord);