2013-05-21 18 views
14

ich wie dieser das letzte doppelte Anführungszeichen („)Ersetzen letzte Vorkommen eines Zeichens in einem String

"Position, fix, dial" 

Ich möchte eine Zeichenfolge habe mit doppelten Anführungszeichen escape (\“ ersetzen)

Die Ergebnis der Zeichenfolge ist

"Position, fix, dial\" 

Wie kann ich das tun. Ich bin mir bewusst, das erste Auftreten der Zeichenfolge zu ersetzen. aber nicht wissen, wie das letzte Vorkommen eines Strings ersetzen

Antwort

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

fragen Sie einfach. Warum nicht so? 'String str =" \ "Positionieren, fixieren, wählen \" "; str.replaceAll ("[\"] \\ Z "," \ "); System.out.println (str); ' – Dudeist

+0

Ja, Sie können etwas wie ** str = str.replaceAll (" [\ "] \\ Z", "\\\\" ") ** verwenden. Aber es wird das letzte quot am Ende der Eingabe ersetzen. es funktioniert nicht für <** "Position, fix, dial" erneut **>. – yavuzkavus

+2

@Dudeist, weil das viel weniger lesbar ist. – Patrick

42

Dies sollte funktionieren:

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()); 
} 

Dieses:

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

Drucke:

"Position, fix, dial\" 

Test.

+0

Dies ist besser als die angenommene Antwort, weil es ein allgemeiner Zweck ist. – demongolem

1

Wenn Sie nur das Las-Zeichen entfernen möchten (falls vorhanden), ist dies eine Ein-Zeilen-Methode. Ich benutze das für Verzeichnisse.

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

Dies funktioniert nur für einzelne Zeichen Dinge. –

Verwandte Themen