替换字符串中最后一个出现的字符

25

我有一个像这样的字符串

"Position, fix, dial"

我想用转义双引号(\")替换最后一个双引号(")

字符串的结果应该是

"Position, fix, dial\"

我该怎么做呢?我知道如何替换字符串的第一次出现,但不知道如何替换最后一次出现的字符串。

4个回答

62

这应该可以正常工作:

String replaceLast(String string, String substring, String replacement)
{
  int index = string.lastIndexOf(substring);
  if (index == -1)
    return string;
  return string.substring(0, index) + replacement
          + string.substring(index+substring.length());
}

这个:

System.out.println(replaceLast("\"Position, fix, dial\"", "\"", "\\\""));

打印:

"Position, fix, dial\"

测试


这比被接受的答案更好,因为它是通用的。 - demongolem

44
String str = "\"Position, fix, dial\"";
int ind = str.lastIndexOf("\"");
if( ind>=0 )
    str = new StringBuilder(str).replace(ind, ind+1,"\\\"").toString();
System.out.println(str);

更新

 if( ind>=0 )
    str = new StringBuilder(str.length()+1)
                .append(str, 0, ind)
                .append('\\')
                .append(str, ind, str.length())
                .toString();

只是问一下,为什么不这样做呢?String str = "\"Position, fix, dial\""; str.replaceAll("[\"]\\Z", "\""); System.out.println(str); - Dudeist
是的,你可以使用类似 str = str.replaceAll("["]\Z", "\\"") 的东西。但它只会替换输入末尾的最后一个引号。对于 < **"Position, fix, dial" again** > 它不起作用。 - yavuzkavus
2
@Dudeist 因为那样可读性会大大降低。 - Patrick

3

如果你只想删除最后一个字符(如果有的话),这是一种一行代码的方法。我将其用于目录。

localDir = (dir.endsWith("/")) ? dir.substring(0,dir.lastIndexOf("/")) : dir;

2
String docId = "918e07,454f_id,did";
StringBuffer buffer = new StringBuffer(docId);
docId = buffer.reverse().toString().replaceFirst(",",";");
docId = new StringBuffer(docId).reverse().toString();

1
这仅适用于单个字符的事物。 - Kris Selbekk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接