Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StringBuilder-完全替换现有字符串。有什么办法吗?_Java_String_Replace_Stringbuilder_Overwrite - Fatal编程技术网

Java StringBuilder-完全替换现有字符串。有什么办法吗?

Java StringBuilder-完全替换现有字符串。有什么办法吗?,java,string,replace,stringbuilder,overwrite,Java,String,Replace,Stringbuilder,Overwrite,我在已有的代码中看到了字符串的用法,其中包含了几个串联。声纳代码覆盖率建议使用StringBuilder。我正在更新代码以使用StringBuilder。但我想知道如何有效地用新字符串覆盖现有内容 在字符串表示法中,其如下所示: String query = "select..."; if ( x ) { query = "select xyz..."; } 对于StringBuilder,我使用了以下方法: StringBuilder query = new StringBuild

我在已有的代码中看到了字符串的用法,其中包含了几个串联。声纳代码覆盖率建议使用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");
它将用新字符串覆盖整个现有字符串。但它不可用

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

应该有用。

这里有一个解决方案,不是最优雅的,使用
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());

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

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

您不应该为此使用StringBuilder。我同意,除了
.delete().append()
。。。我希望StringBuilder拥有
.clear()
:(@fge是的,这就是我所想的。这是一个非常常见的用例。对于给定的示例代码,在执行过程中构造查询是否更有意义,而不是在x为真时完全替换它。是否有一种方法可以用它们之间的共同点启动查询,如果x为真,则使用该用例的其余查询完成查询,否则,请为另一个案例完成它:“我希望StringBuilder有.clear()”:您可以这样做。setLength(0)我知道这一点。这是唯一的方法吗?它不简单。在标准库中,恐怕是这样。可惜没有
query.set(“新字符串”);
方法