it-swarm.com.de

Letztes Vorkommen eines Zeichens in einer Zeichenfolge ersetzen

Ich habe eine Saite wie diese

"Position, fix, dial"

Ich möchte das letzte Anführungszeichen (") durch ein Escape-Anführungszeichen (\") ersetzen.

Das Ergebnis der Zeichenfolge soll sein

"Position, fix, dial\"

Wie kann ich das machen. Mir ist bekannt, dass ich das erste Vorkommen der Zeichenfolge ersetzen muss. Aber ich weiß nicht, wie ich das letzte Vorkommen einer Zeichenfolge ersetzen soll

22
Mahe
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);

Aktualisieren

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

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

Dies:

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

Drucke:

"Position, fix, dial\"

Test .

53
Dukeling

Wenn Sie nur das Las-Zeichen entfernen möchten (falls es eines gibt), ist dies eine einzeilige Methode. Ich benutze dies für Verzeichnisse.

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