Java: StringBuffer & Concatenation

后端 未结 6 2030
梦如初夏
梦如初夏 2021-01-05 01:59

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

StringBuffer str = new StringBuffer();

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

相关标签:
6条回答
  • 2021-01-05 02:24

    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! :)

    0 讨论(0)
  • 2021-01-05 02:28

    Can you not create a new class which wraps around StringBuffer and add an appendWithTrailingSpace() method?

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

    (Although you may want to call your method something a little shorter.)

    0 讨论(0)
  • 2021-01-05 02:39

    You should be using StringBuilder.

    Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.

    0 讨论(0)
  • 2021-01-05 02:42

    Another possibility is that StringBuilder objects return themselves when you call append, meaning you can do:

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

    Not quite as slick, but it is probably an easier solution than the + " " method.

    Another possibility is to build a wrapper class, like PaddedStringBuilder, that provides the same methods but applies the padding you want, since you can't inherit.

    0 讨论(0)
  • 2021-01-05 02:45

    StringBuffer is final. You cannot derive from it. The Best solution really is to add the padding for yourself. Write a method for it and use a PADDING-Constant so that you can easily change it, or better put it in a parameter.

    0 讨论(0)
  • Just add the space yourself, it's easy enough, as per your own example.

    0 讨论(0)
提交回复
热议问题