使用StringBuilder和双括号初始化

时间:2014-05-12 08:03:30

标签: java stringbuilder double-brace-initialize

双括号初始化有利于更好地查看java代码的上下文。

遗憾的是,StringBuilder不能像

那样使用双括号初始化
    final String[] array = new String[] {"A", "B"};
    System.out.println(new StringBuilder(){{
                           for (String s : array){
                               append(s + "\n");
                           }
                       }}.toString());

这是一个不错的选择吗?更好的建议? 我对这个问题的意图不是为字符串连接找到方法。我的目的是找到一种使用StringBuilder的双重支撑的方法。

    final String[] array = new String[] {"A", "B"};
    System.out.println(new Object(){
        @Override public String toString(){
            StringBuilder stringBuilder = new StringBuilder();
            for (String s : array){
                stringBuilder.append(s + "\n");
            }
            return stringBuilder.toString();
        }
    });

3 个答案:

答案 0 :(得分:0)

如果你想要实现的只是从一个字符串数组创建一个字符串,你可以使用Arrays.toString() method

System.out.println(Arrays.toString(array));

此方法返回指定数组内容的字符串表示形式。

答案 1 :(得分:0)

使用额外的实用程序类可以进行双括号初始化。与

public static class StringBuild{
    private StringBuilder stringBuilder = new StringBuilder();

    public void append(String string){
        stringBuilder.append(string);
    }

    @Override
    public String toString(){
        return stringBuilder.toString();
    }
}
我可以写

    final String[] array = new String[] {"A", "B"};
    System.out.println(new StringBuild(){{
            for (String s : array){
                append(s + "\n");
            }
        }
    });

答案 2 :(得分:0)

替代方法是不可接受的,因为它改变了StringBuilder对象的类。

在你的程序中,第一个选项不起作用,因为StringBuilder是最终的。你无法改变最后的课程。您可以使用以下代码,该代码适用于所有情况。

    final String[] array = {"a", "b"};
    StringBuilder sb = new StringBuilder(new Object(){
        @Override
        public String toString() {
            String str = "";
            for(String st : array){
                str+=st;
            }
            return str;
        }
    }.toString());
    System.out.println(sb);