3

既存のコードでいくつかの連結を使用して文字列を使用しています。Sonar コード カバレッジでは、StringBuilder の使用を推奨しています。StringBuilder を使用するようにコードを更新しています。しかし、既存のコンテンツを新しい文字列で効率的に上書きする方法を知りたいです。

文字列表現では、次のようになります。

String query = "select...";
if ( x ) {
    query = "select xyz...";
}

StringBuilder では、これを使用しました。

 StringBuilder query = new StringBuilder("select...");
 if ( x ) {
     // I need to overwrite the existing stringbuilder content here
     query = new StringBuilder("Select xyz..");
        //or
     query = query.replace(,,,);
        //or
     //Anything better
 }

私は次のような方法があることを望んでいました:

 query.replace("new string");

既存の文字列全体を新しい文字列で上書きします。しかし、それは利用できません。

4

3 に答える 3

11
query.replace(0,query.length(), "new string");

動作するはずです。

于 2013-06-12T18:29:27.357 に答える
0

2 つの条件があるとしStringBuilder.replace(int start, int end, String str)
ましょう:

  • 条件1: 「 ele」を「xxx」に置き換えたい
  • 条件 2: " ... " を " yyy "に置き換えたい

以下を試してください

StringBuilder query = new StringBuilder("select...");
String x = "ele";

String term1 = "ele";
String newTerm1 = "xxx";
String term2 = "...";
String newTerm2 = "yyy";

if ( x.equals(term1) ) {
    int start = query.indexOf(term1);
    int end = start + term1.length();
    query.replace(start, end, newTerm1);

}
else if (x.equals(term2)){
    int start = query.indexOf(term2);
    int end = start + term2.length();
    query.replace(start, end, newTerm2);
}
System.out.println(query.toString());
于 2014-01-28T03:16:40.737 に答える