Java的:StringBuffer的和级联(Java: StringBuffer & Concat

2019-07-21 00:40发布

我在Java中使用StringBuffer来Concat的字符串连接在一起,就像这样:

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");

我将使用StringBuilder虽然作为格罗姆建议,但这是怎样的代码看起来现在

Answer 1:

我认为这是比较容易处理,或者与一个辅助方法(未经测试的代码):

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();
    }
}

这里有一个文章的主题。

希望能帮助到你! :)



Answer 2:

你应该使用StringBuilder的 。

如有可能,建议,这个类优先于StringBuffer的使用,因为它会根据大多数实现更快。



Answer 3:

StringBuffer的是最终决定。 你不能从它派生。 最好的解决方案确实是添加填充自己。 写它的方法和使用PADDING-恒定,让你可以轻松地改变它,或者更好的把它放在一个参数。



Answer 4:

您不能创建一个新的类,它周围包裹StringBuffer并添加appendWithTrailingSpace()方法?

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

(虽然你可能想打电话给你的方法什么短一些。)



Answer 5:

只需添加自己的空间,这是很容易,按你自己的例子。



Answer 6:

另一种可能性是StringBuilder的对象返回自己,当你打电话追加,这意味着你可以这样做:

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

不是很光滑,但它可能比+“”的方法更简单的解决方案。

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



文章来源: Java: StringBuffer & Concatenation