Search code examples
javaconcatenationstringbuffer

Java: StringBuffer & Concatenation


I'm using StringBuffer in Java to concat strings together, like so:

StringBuffer str = new StringBuffer();

str.append("string value");

I would like to know if there's a method (although I didn't find anything from a quick glance at the documentation) or some other way to add "padding".

Let me explain; every time I append something to the string, I want to add a space in the end, like so:

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

and I have several calls to append.. and every time, I want to add a space. Is there a way to set the object so that it will add a space automatically after each append?

EDIT --

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

I'll use StringBuilder though as grom suggested, but that's how the code looks right now


Solution

  • I think this is handled easier either with a helper method (untested code):

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

    Or even using a Builder pattern with a fluent interface (also untested code):

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

    Here's an article on the subject.

    Hope it helps! :)