如何从 stringbuilder 中删除最后一个字符串?

How to remove the last string from a stringbuilder?

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

StringBuilder preparedStatement = new StringBuilder();
states.keySet().forEach(key -> preparedStatement
               .append(key)
               .append(" = ")
               .append(":")
               .append(key)
               .append(" 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()
                                           );

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

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

StringBuilder buf = new StringBuilder();

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

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