【发布时间】:2014-06-13 02:19:48
【问题描述】:
假设我有一个字符串
string myWord="AAAAA";
我想将“AA”替换为“BB”,但只是最后一次出现,如下所示:
"AAABB"
string.replace() 和 string.replaceFirst() 都不行。 有 string.replaceLast() 吗?而且,如果没有,是否会有一个或者是否有替代方法也可以使用正则表达式?
【问题讨论】:
假设我有一个字符串
string myWord="AAAAA";
我想将“AA”替换为“BB”,但只是最后一次出现,如下所示:
"AAABB"
string.replace() 和 string.replaceFirst() 都不行。 有 string.replaceLast() 吗?而且,如果没有,是否会有一个或者是否有替代方法也可以使用正则表达式?
【问题讨论】:
你可以这样做:
myWord = myWord.replaceAll("AA$","BB");
$ 表示最后。
【讨论】:
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 做一些事情。
reverse.replaceFirst() 调用的结果进行一些处理,例如将其重新分配给reverse。
您可以通过String#subtring 做到这一点
myWord= myWord.substring(0, myWord.length() - 2) + "BB";
【讨论】:
myWord=myWord.replaceAll("AA(?!A)","BB");
【讨论】:
查找子字符串最后一次出现的索引。
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);
【讨论】:
只需获取最后一个索引,然后将表达式替换为您要替换的内容即可。
myWord 是原词sayAABDCAADEF。 sourceWord 是你想要替换的,比如AA
targetWord 就是你想用 BB 替换它的东西。
StringBuilder strb=new StringBuilder(myWord);
int index=strb.lastIndexOf(sourceWord);
strb.replace(index,sourceWord.length()+index,targetWord);
return strb.toString();
当您只想用字符串替换字符串时,这很有用。更好的方法是使用模式匹配器并找到最后一个匹配的索引。从该索引中获取子字符串,在那里使用替换函数,然后将其添加回原始字符串。这也将帮助您替换正则表达式
【讨论】:
似乎有一个正则表达式的答案。
我最初试图通过正则表达式解决这个问题,但无法解决像“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);
【讨论】: