Java 替换另一个字符串中最后出现的字符串
假设我有一根绳子Java 替换另一个字符串中最后出现的字符串,java,regex,string,Java,Regex,String,假设我有一根绳子 string myWord="AAAAA"; 我想用“BB”替换“AA”,但仅是最后一次出现,如下所示: "AAABB" string.replace()和string.replaceFirst()都不能完成此任务。 是否有字符串.replaceLast()?如果没有,是否会有一个或有其他方法也使用正则表达式?您可以这样做: myWord = myWord.replaceAll("AA$","BB"); $表示最后一次。您可以使用字符串#子字符串 String strin
string myWord="AAAAA";
我想用“BB”替换“AA”,但仅是最后一次出现,如下所示:
"AAABB"
string.replace()和string.replaceFirst()都不能完成此任务。
是否有字符串.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();
myWord= myWord.substring(0, myWord.length() - 2) + "BB";
查找子字符串最后一次出现的索引
String myWord = "AAAAAasdas";
String toReplace = "AA";
String replacement = "BBB";
int start = myWord.lastIndexOf(toReplace);
创建一个StringBuilder
(如果需要,您可以连接字符串)
在最后一个引用之前追加零件
builder.append(myWord.substring(0, start));
附加要用作替换的字符串
builder.append(replacement);
在原始`字符串的最后一个引用之后追加该部分
builder.append(myWord.substring(start + toReplace.length()));
你完成了
System.out.println(builder);
只需获取最后一个索引,并使用要替换的内容替换表达式
myWord
是原始单词sayAABDCAADEF
sourceWord
是您要替换的,比如说AA
targetWord
是您想要用sayBB
替换它的内容
StringBuilder strb=new StringBuilder(myWord);
int index=strb.lastIndexOf(sourceWord);
strb.replace(index,sourceWord.length()+index,targetWord);
return strb.toString();
当您只想用字符串替换字符串时,这很有用。更好的方法是使用模式匹配器并查找最后一个匹配索引。将该索引作为子字符串,在那里使用replace函数,然后将其添加回原始字符串。这也将帮助您替换正则表达式似乎有一个正则表达式可以解决这个问题 我最初试图通过正则表达式解决这个问题,但无法解决“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);
$表示字符串的结尾。但如果最后一次出现没有终止字符串呢?它是regex replace吗?如果字符串有问号(?),它就不起作用。例如:StringUtil.replaceLast(“ab?c”,“b?c”,“”)返回ab?我认为OP想让它更通用,而不是aI。如果要替换的字符串和替换的字符串都是回文,这难道不管用吗?此外,字符串是不可变的,因此您必须对
replaceFirst
执行某些操作。确实,您还需要反转替换字符串。您仍然需要对reverse.replaceFirst()
调用的结果执行某些操作,例如将其重新分配给reverse
(注释来自@Biswajit\u 86)您需要反转源表达式和目标表达式才能使其工作。所以,如果你想用CA替换ABABAB中的AB,那么你的步骤应该是1。倒转ababab 2。将源字符串AB反转为BA 3。将目标CA反转为AC 4。现在使用前5个。然后反转目标字符串
StringBuilder strb=new StringBuilder(myWord);
int index=strb.lastIndexOf(sourceWord);
strb.replace(index,sourceWord.length()+index,targetWord);
return strb.toString();
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);