替换字符串中最后一次出现的字符[重复]
Posted
技术标签:
【中文标题】替换字符串中最后一次出现的字符[重复]【英文标题】:Replace Last Occurrence of a character in a string [duplicate] 【发布时间】:2013-05-15 22:44:42 【问题描述】:我有这样的字符串
"Position, fix, dial"
我想用转义双引号(\")替换最后一个双引号(")
字符串的结果是
"Position, fix, dial\"
我该怎么做。我知道替换第一次出现的字符串。但不知道如何替换最后出现的字符串
【问题讨论】:
【参考方案1】: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);
是的,您可以使用 str = str.replaceAll("[\"]\\Z", "\\\\\"") 之类的东西。但它将替换输入末尾的最后一个引号。对于“定位、修复、拨号”再次不起作用 >.
@Dudeist 因为这样可读性差很多。【参考方案2】:
String docId = "918e07,454f_id,did";
StringBuffer buffer = new StringBuffer(docId);
docId = buffer.reverse().toString().replaceFirst(",",";");
docId = new StringBuffer(docId).reverse().toString();
【讨论】:
这仅适用于单个字符的东西。【参考方案3】:如果您只想删除 las 字符(如果有的话),这是一种单行方法。我将它用于目录。
localDir = (dir.endsWith("/")) ? dir.substring(0,dir.lastIndexOf("/")) : dir;
【讨论】:
【参考方案4】:这应该可行:
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\"
Test.
【讨论】:
这比公认的答案要好,因为它是通用的。以上是关于替换字符串中最后一次出现的字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章