web-dev-qa-db-ja.com

文字列内の文字の最後の出現を置換

私はこのような文字列を持っています

"Position, fix, dial"

最後の二重引用符( ")をエスケープ二重引用符(\")に置き換えたい

文字列の結果は次のようになります

"Position, fix, dial\"

これどうやってするの。文字列の最初の出現を置き換えることを認識しています。しかし、文字列の最後の出現を置き換える方法がわからない

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

更新

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

これは動作するはずです:

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\"

テスト

53
Dukeling

ラス文字のみを削除する場合(ある場合)、これは1行の方法です。これをディレクトリに使用します。

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