Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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与for循环一起使用 私有字符串生成uffix(列表搜索、列表排序){ 字符串ret=“”; if(searches!=null&!searches.isEmpty()){ ret+=“其中”; for(字符串[]搜索:搜索){ 如果(search.length_Java_For Loop_Stringbuilder - Fatal编程技术网

Java 将stringbuilder与for循环一起使用 私有字符串生成uffix(列表搜索、列表排序){ 字符串ret=“”; if(searches!=null&!searches.isEmpty()){ ret+=“其中”; for(字符串[]搜索:搜索){ 如果(search.length

Java 将stringbuilder与for循环一起使用 私有字符串生成uffix(列表搜索、列表排序){ 字符串ret=“”; if(searches!=null&!searches.isEmpty()){ ret+=“其中”; for(字符串[]搜索:搜索){ 如果(search.length,java,for-loop,stringbuilder,Java,For Loop,Stringbuilder,我的声纳扫描表明,使用“+”在循环中连接字符串是一个重大错误。对于如何修复此错误,它没有给出太多的见解。在这种情况下可以使用StringBuilder吗?如果是这样,我将如何使用增强的for循环实现StringBuilder?我不太熟悉使用StringBuilder 此外,我是否可以在列表中添加StringBuilder,如下所示?我需要去掉代码“value+=ds;”和value=d+“” 私有列表检查搜索(列表搜索In){ 列表搜索=新建ArrayList(); if(searchesIn!

我的声纳扫描表明,使用“+”在循环中连接字符串是一个重大错误。对于如何修复此错误,它没有给出太多的见解。在这种情况下可以使用StringBuilder吗?如果是这样,我将如何使用增强的for循环实现StringBuilder?我不太熟悉使用StringBuilder

此外,我是否可以在列表中添加StringBuilder,如下所示?我需要去掉代码“value+=ds;”和value=d+“”

私有列表检查搜索(列表搜索In){
列表搜索=新建ArrayList();
if(searchesIn!=null){
for(TransactionSearchField搜索:searchesIn){
字符串值=search.getValue();
if(value!=null&&value.length()>0){
if(search.getDataType().equals(double.class)){
字符串[]dSplit=value.split(“,”);
value=“”;
for(字符串ds:dSplit){
数值+=ds;
}
双d;
试一试{
d=Double.parseDouble(值);
值=d+“”;
}捕获(IllegalArgumentException e){
value=“”;
}
}else if(search.getDataType().equals(Date.class)){
值=格式化日期(生成日期(值));
}
添加(新事务搜索字段(search.getDataType(),search.getTableField(),search.getLogic(),value,search.getViewField());
}
}
}
返回搜索;
}

您可以尝试以下方法:

private List<TransactionSearchField> checkSearches(List<TransactionSearchField> searchesIn) {
    List<TransactionSearchField> searches = new ArrayList<TransactionSearchField>();
    if (searchesIn != null) {
        for (TransactionSearchField search : searchesIn) {
            String value = search.getValue();
            if (value != null && value.length() > 0) {
                if (search.getDataType().equals(double.class)) {
                    String[] dSplit = value.split(",");
                    value = "";
                    for (String ds : dSplit) {
                        value += ds;
                    }
                    double d;
                    try {
                        d = Double.parseDouble(value);
                        value = d + "";
                    } catch (IllegalArgumentException e) {
                        value = "";
                    }
                } else if (search.getDataType().equals(Date.class)) {
                    value = formatDate(generateDate(value));
                }
                searches.add(new TransactionSearchField(search.getDataType(), search.getTableField(), search.getLogic(), value, search.getViewField()));
            }
        }
    }
    return searches;
}

您可以尝试以下方法:

private List<TransactionSearchField> checkSearches(List<TransactionSearchField> searchesIn) {
    List<TransactionSearchField> searches = new ArrayList<TransactionSearchField>();
    if (searchesIn != null) {
        for (TransactionSearchField search : searchesIn) {
            String value = search.getValue();
            if (value != null && value.length() > 0) {
                if (search.getDataType().equals(double.class)) {
                    String[] dSplit = value.split(",");
                    value = "";
                    for (String ds : dSplit) {
                        value += ds;
                    }
                    double d;
                    try {
                        d = Double.parseDouble(value);
                        value = d + "";
                    } catch (IllegalArgumentException e) {
                        value = "";
                    }
                } else if (search.getDataType().equals(Date.class)) {
                    value = formatDate(generateDate(value));
                }
                searches.add(new TransactionSearchField(search.getDataType(), search.getTableField(), search.getLogic(), value, search.getViewField()));
            }
        }
    }
    return searches;
}
代码式

StringBuilder sb = new StringBuilder();
for(String[] sort : sorts){
    //Your other logic
    sb.append(sort[0]);
    sb.append(" ");
    sb.append(sort[1]);
    sb.append(",");
}
本质上是(假设结果是字符串)

如果将其放入循环中,在每次迭代中,您将创建
新StringBuilder
对象,该对象将复制
结果
字符串中的所有字符,然后将
新部件
附加到该对象中,然后创建另一个字符串,该字符串将存储在
结果
变量中

对于长字符串,这是非常低效的,因为要添加哪怕是很小的部分,我们都需要复制当前结果中的所有字符(两次,一次是在创建StringBuilder时,一次是在创建新结果字符串时)

以避免此问题,而不是像

result = new StringBuilder(result).append(newPart).toString();
我们应该创建一个StringBuilder并
向id追加
新部分。StringBuilder类的优点是它在一个相当大的字符数组中保存字符,因此它有足够的空间来容纳新字符。如果在某一点上空间不够,StringBuilder将创建一个大小为两倍的新数组,并复制所有字符t所以它限制了我们调整数组大小和遍历所有字符所需的次数

因此,合适的解决方案如下所示:

String result = "";
for (String newPart : otherStrings){
    result = result + newPart;
    result = result + ", ";
}
顺便说一句,StringBuilder允许对保留的字符进行操作。例如,我们可以通过StringBuilder.delete(int start,int end)
删除其中的一些字符

StringBuilder sb = new StringBuilder();
for(String[] sort : sorts){
    //Your other logic
    sb.append(sort[0]);
    sb.append(" ");
    sb.append(sort[1]);
    sb.append(",");
}
本质上是(假设结果是字符串)

如果将其放入循环中,在每次迭代中,您将创建
新StringBuilder
对象,该对象将复制
结果
字符串中的所有字符,然后将
新部件
附加到该对象中,然后创建另一个字符串,该字符串将存储在
结果
变量中

对于长字符串,这是非常低效的,因为要添加哪怕是很小的部分,我们都需要复制当前结果中的所有字符(两次,一次是在创建StringBuilder时,一次是在创建新结果字符串时)

以避免此问题,而不是像

result = new StringBuilder(result).append(newPart).toString();
我们应该创建一个StringBuilder并
向id追加
新部分。StringBuilder类的优点是它在一个相当大的字符数组中保存字符,因此它有足够的空间来容纳新字符。如果在某一点上空间不够,StringBuilder将创建一个大小为两倍的新数组,并复制所有字符t所以它限制了我们调整数组大小和遍历所有字符所需的次数

因此,合适的解决方案如下所示:

String result = "";
for (String newPart : otherStrings){
    result = result + newPart;
    result = result + ", ";
}

顺便说一句,StringBuilder允许对保留的字符进行操作。例如,我们可以通过StringBuilder.delete(int start,int end)
直接将字符串连接转换为使用StringBuilder:

StringBuilder sb = new StringBuilder();
for (String newPart : otherStrings){
    sb.append(newPart);
    sb.append(", ");
    //you could also chain these methods
    //sb.append(newPart).append(", ");
}
String result = sb.toString();
私有字符串生成uffix(列表搜索、列表排序){
StringBuilder ret=新的StringBuilder();
if(searches!=null&!searches.isEmpty()){
ret.append(“其中”);
for(字符串[]搜索:搜索){
如果(search.length<3){
继续;
}
ret.append(搜索[0])。append(搜索[1])。append(搜索[2])。append(“and”);
}
ret.delete(ret.length()-5,ret.length());
}
ret.append(“订购人”);
if(sorts!=null&!sorts.isEmpty()){
for(字符串[]排序:排序){
如果(排序长度<2){
继续;
}
ret.append(排序[0]).append(“”)。append(排序[1]).append(“”)