private String generateSuffix(List<String[]> searches, List<String[]> sorts) {
String ret = "";
if (searches != null && !searches.isEmpty()) {
ret += "where ";
for (String[] search : searches) {
if (search.length < 3) {
continue;
}
ret += search[0] + search[1] + search[2] + " and ";
}
ret = ret.substring(0, ret.length() - 5);
}
ret += " order by ";
if (sorts != null && !sorts.isEmpty()) {
for (String[] sort : sorts) {
if (sort.length < 2) {
continue;
}
ret += sort[0] + " " + sort[1] + ",";
}
}
return ret;
}
}
Сканирование SONAR показало, что использование «+» для конкатенации строк в цикле является основной ошибкой. Это не дает большого понимания того, как эта ошибка может быть исправлена. Можно ли использовать StringBuilder в этом случае? Если да, то как мне пойти на реализацию StringBuilder с расширенным циклом? Я не очень хорошо знаком с использованием StringBuilder.using stringbuilder with for loop
Также можно добавить StringBuilder в список, как показано ниже? Мне нужно избавиться от кода «value + = ds;» и значение = d + ""»
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 = новый StringBuilder(); для (String s: yourStringArray) { sb.append (s); } Строковый результат = sb.toString(); Скопируйте и отформатируйте его –
Если вы используете java8, используя ['StringJoiner'] (https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html), это может быть вариант. @Rainbolt: Не дубликат этого вопроса. OP только удаляет последние '' и ''. Также речь идет не о производительности. – fabian
Причина конкатенации строки в цикле плохо, потому что строки неотменяемы в Java.Поэтому каждый раз, когда вы объединяетесь, вы создаете совершенно новую строку. Конечно, если ваш цикл мал, разница незначительна. – ryuu9187