我们说我有一个字符串
string myWord="AAAAA";
我想取代" AA"用" BB",但只有最后一次出现,如下:
"AAABB"
string.replace()和 string.replaceFirst()都不能完成这项工作。 是否有 string.replaceLast()?并且,如果没有,是否会有一个或者还有替代方案也在使用正则表达式?
答案 0 :(得分:16)
你可以这样做:
myWord = myWord.replaceAll("AA$","BB");
$
意思是最后一次。
答案 1 :(得分:12)
查找最后一次出现的子字符串的索引。
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);
在原始`String。
的最后一次出现后追加该部分builder.append(myWord.substring(start + toReplace.length()));
你已经完成了。
System.out.println(builder);
答案 2 :(得分:1)
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();
答案 3 :(得分:1)
只需获取最后一个索引,然后使用要替换的内容替换表达式。
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();
当你想用Strings替换字符串时,这很有用。更好的方法是使用Pattern matcher并找到最后一个匹配的索引。从该索引中取出子串,在那里使用replace函数,然后将其添加回原始String。这将有助于您替换正则表达式
答案 4 :(得分:1)
似乎可以有一个正则表达式的答案。
我最初试图通过正则表达式解决这个问题,但无法解决像AAAzzA'这样的情况。
所以我在下面提出了这个答案,它可以同时处理AAAAA'和#AAA; AAAzzA'。这可能不是最佳答案,但我认为它有效。
基本思路是找到AA' 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);
答案 5 :(得分:-1)
您可以使用String#subtring
myWord= myWord.substring(0, myWord.length() - 2) + "BB";
答案 6 :(得分:-1)
myWord=myWord.replaceAll("AA(?!A)","BB");