首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >格式化程序不能在字符串上使用吗?

格式化程序不能在字符串上使用吗?
EN

Stack Overflow用户
提问于 2018-06-10 05:12:33
回答 1查看 48关注 0票数 -1

当我检查以下代码的结果时,我被难住了:

public class StringBuilderTester {

    public static void main(String[] args) {
        StringBuilder matrix = new StringBuilder();
        Random r = new Random();
        Formatter formatter = new Formatter();
        for (int j=0;j<10;j++) {
            String[] strings = new String[10];
            StringBuilder formatString = new StringBuilder();
            for (int i=0;i<10;i++) {
                formatString.append("%-10.5s");
                strings[i] = new Integer(r.nextInt(10)).toString();
            }
            formatString.append("\n");
            matrix.append(formatter.format(formatString.toString(), strings));  //gives me unexpected result: 1+2+3+..+10=55 lines of 10 cols of random ints
            //matrix.append(String.format(formatString.toString(), strings));  //gives me expected results: 10 lines of 10 cols of random ints
        }
        System.out.println(matrix.toString());
    }
}

我得到55 (!)每行10列,每列都是格式整齐的整数:行1,然后是行1和行2,然后是行1,2和3,依此类推。看起来formatter.format是渐进式工作的。

formatter.format改为String.format时,结果与预期不谋而合: 10行格式整齐的整数。

Java参考资料指出

可以使用静态方法String.format设置

字符串的格式。

但没有迹象表明new Format().formatter(...)可以不用于字符串。(如果我使用构造函数Format(Appendable matrix),一切都会按预期进行。)

这种反复无常的行为是怎么解释的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 05:27:32

这两种情况实际上都是expected behaviour。所以当你第一次打电话给

matrix.append(formatter.format(formatString.toString(), strings));

它将row1添加到格式化程序缓冲区,然后将其附加到矩阵。再次调用它,它会将第2行添加到缓冲区,但现在缓冲区包含row1和row2,所以这两行都会添加到矩阵中,矩阵现在有第1行、第1行、第2行。继续下去,最终总共添加了55行。

old matrix    +    buffer    =    new matrix
                   1              1
1                  12             112
112                123            112123
112123             1234           1121231234
...and so on

另一方面,如果只是调用String.format,它会产生与formatter.format相同的输出,但不会将其附加到任何缓冲区。这样,在每次循环迭代中,只有创建的最后一行被附加到矩阵中,这是预期的结果。

DR:formatter.format将格式化的行添加到内部缓冲区,然后输出整个缓冲区,而String.format只是输出格式化的行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档