替换另一个字符串中最后一个字符串

时间:2014-04-27 16:19:35

标签: java regex string

我们说我有一个字符串

string myWord="AAAAA";

我想取代" AA"用" BB",但只有最后一次出现,如下:

"AAABB"

string.replace() string.replaceFirst()都不能完成这项工作。 是否有 string.replaceLast()?并且,如果没有,是否会有一个或者还有替代方案也在使用正则表达式?

7 个答案:

答案 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是原始单词AABDCAADEFsourceWord是您要替换的内容,例如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");