【问题标题】:How to remove the last string from a stringbuilder?如何从字符串生成器中删除最后一个字符串?
【发布时间】:2019-03-02 20:59:30
【问题描述】:

我正在动态创建一个字符串

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

我想在循环结束时删除最后一个AND。这可能吗?

【问题讨论】:

  • 我不希望 StringBuilder 跟踪添加的不同片段。如果您需要,只需将字符串存储在列表或堆栈中,然后自己根据需要组合它们。
  • 最简单的做法是只在需要时添加AND

标签: java string stringbuilder


【解决方案1】:

是的。你知道" 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()) 来避免delete 执行过多的System.arraycopy 并避免substring 创建的过多的String
【解决方案2】:

其实我认为StringBuilder在一般情况下不支持删除。它旨在构建一个字符串。

我建议您不要将 " AND " 添加到构建器中:

StringBuilder buf = new StringBuilder();

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

这是最好的选择,因为要删除这部分,你必须做一个字符串复制。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2011-11-18
    • 2018-11-22
    • 2017-08-19
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多