8

我在 Java 中使用 StringBuffer 将字符串连接在一起,如下所示:

StringBuffer str = new StringBuffer();

str.append("string value");

我想知道是否有一种方法(虽然我没有从快速浏览文档中找到任何东西)或其他添加“填充”的方法。

让我解释; 每次我在字符串中附加一些东西时,我都想在最后添加一个空格,如下所示:

String foo = "string value";
str.append(foo + " ");

而且我有几个电话要追加..每次,我都想添加一个空格。有没有办法设置对象,以便在每次追加后自动添加一个空格?

编辑 -

String input
StringBuffer query = new StringBuffer();
Scanner scanner = new Scanner(System.in);
scanner.UseDelimiter("\n");

do {
   System.out.println("sql> ");

   input = scanner.next();

   if (!empty(input)) query.append(input);

   if (query.toString().trim().endsWith(";")) {
         //run query
   }
}
while (!input.equalsIgnoreCase("exit");

我将按照 grom 的建议使用 StringBuilder,但这就是代码现在的样子

4

6 回答 6

10

我认为使用辅助方法(未经测试的代码)可以更轻松地处理此问题:

public String myMethod() {
    StringBuilder sb = new StringBuilder();
    addToBuffer(sb, "Hello").addToBuffer("there,");
    addToBuffer(sb, "it").addToBuffer(sb, "works");
}

private StringBuilder addToBuffer(StringBuilder sb, String what) {
    return sb.append(what).append(' ');  // char is even faster here! ;)
}

甚至使用具有流畅界面的 Builder 模式(也是未经测试的代码):

public String myMethod() {
    SBBuilder builder = new SBBuilder()
        .add("Hello").add("there")
        .add("it", "works", "just", "fine!");

    for (int i = 0; i < 10; i++) {
        builder.add("adding").add(String.valueOf(i));
    }

    System.out.println(builder.build());
}

public static class SBBuilder {
    private StringBuilder sb = new StringBuilder();

    public SBBuilder add(String... parts) {
        for (String p : parts) {
            sb.append(p).append(' '); // char is even faster here! ;)
        }
        return this;
    }

    public String build() {
        return sb.toString();
    }
}

这是一篇关于这个主题的文章。

希望能帮助到你!:)

于 2008-09-30T11:43:40.347 回答
6

您应该使用StringBuilder

在可能的情况下,建议优先使用此类而不是 StringBuffer,因为它在大多数实现下会更快。

于 2008-09-30T08:34:08.433 回答
4

StringBuffer 是最终的。你不能从中得到。最好的解决方案实际上是为自己添加填充。为它编写一个方法并使用 PADDING-Constant 以便您可以轻松更改它,或者更好地将其放入参数中。

于 2008-09-30T08:22:33.203 回答
3

你不能创建一个新的类来包装StringBuffer并添加一个appendWithTrailingSpace()方法吗?

CustomStringBuffer str = new CustomStringBuffer();
str.appendWithTrailingSpace("string value");

(尽管您可能希望将您的方法称为更短的名称。)

于 2008-09-30T08:20:43.253 回答
2

只需自己添加空间,根据您自己的示例,这很容易。

于 2008-09-30T08:15:45.667 回答
1

另一种可能性是 StringBuilder 对象在您调用 append 时返回自己,这意味着您可以这样做:

str.append("string value").append(" ");

不是那么光滑,但它可能是比 + " " 方法更简单的解决方案。

另一种可能性是构建一个包装类,如 PaddedStringBuilder,它提供相同的方法但应用你想要的填充,因为你不能继承。

于 2008-09-30T08:44:42.040 回答