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