2013-05-21 128 views
14

我有这样的替换字符的最后一次出现的字符串

"Position, fix, dial" 

我想替换最后一个双引号(“)与逃生双引号(\”)的字符串

的字符串的结果是

"Position, fix, dial\" 

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

回答

34
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); 
+0

只是问。为什么不喜欢这个? 'String str =“\”位置,修复,拨号\“”; str.replaceAll(“[\”] \\ Z“,”\“”); System.out.println(str);' – Dudeist

+0

是的,你可以使用** str = str.replaceAll(“[\”] \\ Z“,”\\\\\“”)**。但它会替换输入末尾的最后一个“。它不适用于<**“位置,修复,再次拨号**”。 – yavuzkavus

+2

@Dudeist,因为它的可读性差得多。 – Patrick

42

这应该工作:

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

+0

这比接受的答案要好,因为它是通用的。 – demongolem

1

如果您只想删除las字符(如果有的话),这是一种方法。我使用这个目录。

localDir = (dir.endsWith("/")) ? dir.substring(0,dir.lastIndexOf("/")) : dir; 
0
String docId = "918e07,454f_id,did"; 
StringBuffer buffer = new StringBuffer(docId); 
docId = buffer.reverse().toString().replaceFirst(",",";"); 
docId = new StringBuffer(docId).reverse().toString(); 
+0

这只适用于单个字符的东西。 –

相关问题