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
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();
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 .
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;
String docId = "918e07,454f_id,did";
StringBuffer buffer = new StringBuffer(docId);
docId = buffer.reverse().toString().replaceFirst(",",";");
docId = new StringBuffer(docId).reverse().toString();