当我检查以下代码的结果时,我被难住了:
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)
,一切都会按预期进行。)
这种反复无常的行为是怎么解释的?
https://stackoverflow.com/questions/50778582
复制相似问题