web-dev-qa-db-fra.com

Remplacer la dernière occurrence d'un caractère dans une chaîne

J'ai une chaîne comme ça

"Position, fix, dial"

Je veux remplacer le dernier guillemet double (") par un guillemet double d'échappement (\")

Le résultat de la chaîne doit être

"Position, fix, dial\"

Comment puis-je faire ceci. Je suis conscient de remplacer la première occurrence de la chaîne. mais je ne sais pas comment remplacer la dernière occurrence d'une chaîne

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

Mise à jour

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

Cela devrait fonctionner:

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

Cette:

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

Tirages:

"Position, fix, dial\"

Test .

53
Dukeling

Si vous souhaitez uniquement supprimer le caractère las (s'il y en a un), il s'agit d'une méthode sur une ligne. J'utilise cela pour les répertoires.

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