Я динамически создаю строку
StringBuilder preparedStatement = new StringBuilder();
states.keySet().forEach(key -> preparedStatement
.append(key)
.append(" = ")
.append(":")
.append(key)
.append(" AND "));
Я хочу удалить последний AND
в конце цикла. Это возможно?
Проще всего было бы добавлять AND
только тогда, когда это необходимо.
да. Вы знаете, насколько широк " AND "
, поэтому просто используйте StringBuilder#delete
:
preparedStatement.delete(preparedStatement.length() - " AND ".length(),
preparedStatement.length()
);
Или, если вы все равно собираетесь превратить его в String
, используйте StringBuilder#substring
:
String result = preparedStatement.substring(0,
preparedStatement.length()
- " AND ".length()
);
Может сделать preparedStatement.setLength(preparedStatement.length() - " AND ".length())
, чтобы избежать чрезмерного System.arraycopy
, выполняемого delete
, и избежать избыточного String
, созданного substring
На самом деле я думаю, что StringBuilder
не поддерживает удаление в общем случае. Он был разработан для сборки струны.
Просто рекомендую не добавлять в конструктор " А ТАКЖЕ ":
StringBuilder buf = new StringBuilder();
if (someCheck)
buf.add(" AND ");
Это лучший выбор, потому что для удаления этой части вам нужно скопировать строку.
Я бы не ожидал, что StringBuilder будет отслеживать добавленные различные фрагменты. Если вам это нужно, просто сохраните строки в списке или стеке и сами комбинируйте их по мере необходимости.