3

我在现有代码中看到了带有多个连接的字符串用法。声纳代码覆盖建议使用 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

这是一种解决方案,不是最优雅的解决方案,使用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 回答
0

对于您的用例,以下内容似乎很完美:

private static final String SELECT_PRE = "Select";
private static final String SELECT_POST = "...";
StringBuilder query = new StringBuilder(SELECT_PREFIX+SELECT_POST);
if ( x ) {
     query = query.insert(SELECT_PREFIX.length(), " xyz");
}
于 2018-02-27T10:30:52.310 回答