假设我有一个字符串
string myWord="AAAAA";
我想将“AA”替换为“BB”,但只替换最后一次出现,就像这样:
"AAABB"
string.replace()和string.replaceFirst()均无法完成此任务。 是否存在string.replaceLast()?如果不存在,那么是否会有这样一个函数或者是否存在其他可以使用正则表达式的替代方法呢?
查找子字符串最后一次出现的索引。
String myWord = "AAAAAasdas";
String toReplace = "AA";
String replacement = "BBB";
int start = myWord.lastIndexOf(toReplace);
创建一个 `StringBuilder` 对象(如果您想的话,也可以直接连接字符串)。StringBuilder builder = new StringBuilder();
在最后一次出现之前添加该部分。builder.append(myWord.substring(0, start));
追加你想要用作替换的String
。
builder.append(replacement);
在原始的字符串中找到最后一次出现的部分,并将其后面的内容添加上去。builder.append(myWord.substring(start + toReplace.length()));
完成了。
System.out.println(builder);
myWord = myWord.replaceAll("AA$","BB");
$
表示最后。
myWord
是原始单词,比如说 AABDCAADEF
。 sourceWord
是要替换的内容,比如说 AA
,而 targetWord
则是你想要替换成的内容,比如说 BB
。StringBuilder strb=new StringBuilder(myWord);
int index=strb.lastIndexOf(sourceWord);
strb.replace(index,sourceWord.length()+index,targetWord);
return strb.toString();
当您只想替换字符串时,这将非常有用。更好的方法是使用模式匹配器并查找最后一个匹配索引。从该索引中取子字符串,在那里使用替换函数,然后将其添加回原始字符串。这将帮助您替换正则表达式。
String string = "AAAAA";
String reverse = new StringBuffer(string).reverse().toString();
reverse = reverse.replaceFirst(...) // you need to reverse needle and replacement string aswell!
string = new StringBuffer(reverse).reverse().toString();
replaceFirst
进行一些操作。 - Sotirios Delimanolisreverse.replaceFirst()
调用的结果进行操作,例如将其重新赋值给reverse
。 - Sotirios DelimanolisString originalString = "我 FROM 想要 FROM 这个"; String stringReverse = String.valueOf(new StringBuffer(originalString).reverse()).replaceFirst("MORF","OT"); originalString= String.valueOf(new StringBuffer(stringReverse ).reverse()); System.out.println(originalString);
“我 FROM 想要 TO 这个” - Joviano Dias看起来这个问题可能有一个正则表达式的答案。
我最初尝试使用正则表达式解决这个问题,但无法解决像 'AAAzzA' 这样的情况。
所以我想出了下面的答案,可以处理 'AAAAA' 和 'AAAzzA' 两种情况。这可能不是最好的答案,但我想它能够工作。
基本思路是找到 'AA' 最后一个出现的索引并将字符串按该索引拆分:
String myWord = "AAAAAzzA";
String source = "AA";
String target = "BB";
int lastIndex = -1;
if ((lastIndex = myWord.lastIndexOf(source)) >= 0) {
String f = myWord.substring(0, lastIndex);
String b = myWord.substring(lastIndex + target.length() >= myWord
.length() ? myWord.length() : lastIndex + target.length(),
myWord.length());
myWord = f + target + b;
}
System.out.println(myWord);
myWord=myWord.replaceAll("AA(?!A)","BB");
String#subtring
来实现这个功能。myWord= myWord.substring(0, myWord.length() - 2) + "BB";