Как удалить последнюю строку из конструктора строк?

Я динамически создаю строку

StringBuilder preparedStatement = new StringBuilder();
states.keySet().forEach(key -> preparedStatement
               .append(key)
               .append(" = ")
               .append(":")
               .append(key)
               .append(" AND "));

Я хочу удалить последний AND в конце цикла. Это возможно?

Я бы не ожидал, что StringBuilder будет отслеживать добавленные различные фрагменты. Если вам это нужно, просто сохраните строки в списке или стеке и сами комбинируйте их по мере необходимости.

John3136 27.09.2018 04:43

Проще всего было бы добавлять AND только тогда, когда это необходимо.

dave 27.09.2018 05:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
1 846
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

да. Вы знаете, насколько широк " 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

Dioxin 27.09.2018 04:59

На самом деле я думаю, что StringBuilder не поддерживает удаление в общем случае. Он был разработан для сборки струны.

Просто рекомендую не добавлять в конструктор " А ТАКЖЕ ":

StringBuilder buf = new StringBuilder();

if (someCheck)
    buf.add(" AND ");

Это лучший выбор, потому что для удаления этой части вам нужно скопировать строку.

Другие вопросы по теме