我有一个文本,我想在文本中的特定索引处包含一个单词。我设法找到了需要包含新单词的文本索引。但是,我找不到将该索引用于嵌入过程的方法。我尝试使用替换功能如下:
newSentence = oldSentence.replace(oldWord, (oldWord+" "+newWord));
问题是这种方法替换了所有出现的 oldWord,而我只希望更改特定索引处的单词。
我很感激任何建议
您可以使用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)
将此序列的子字符串中的字符替换为指定字符串中的字符。子字符串从指定的起点开始,并延伸到索引 end - 1 处的字符,如果不存在这样的字符,则延伸到序列的末尾。首先删除子字符串中的字符,然后在开始时插入指定的字符串。(如有必要,此序列将被延长以适应指定的字符串。)
在 Java 中,您不能更改字符串的内容。
您必须通过提取要替换的单词之前的文本和单词之后的文本来构建一个新的文本,并将所有三个(之前、单词、之后)连接到一个新字符串中。看看StringBuilder
图书馆类。
StringBuilder buf = new StringBuilder();
buf.append(oldSentence.substring(0,wordPos));
buf.append(newWord);
buf.append(oldSentence.substring(wordPos+oldWordLength));
oldWord.substring(0, index) + embeddedText + oldWord.substring(index);
这是假设您的索引值是您想要嵌入文本的第 n 个字符。
您可以使用replaceFirst()
,但为了安全起见,您应该将文本转换为正则表达式引用的字符串,以防“单词”包含任何特殊的正则表达式字符,例如点:
newSentence = oldSentence.replaceFirst(Pattern.quote(oldWord), oldWord+" "+newWord);
或者稍微“正则表达式”,将 wird 变成后视:
newSentence = oldSentence.replaceFirst("(?<="Pattern.quote(oldWord)+")", " "+newWord);