Оба случая на самом деле ожидаемое поведение .Класс Formatter
имеет внутренний буфер (по умолчанию a StringBuilder
), к которому он добавляет результат каждого вызова к format
, а метод toString()
возвращает все содержимое буфера.Поэтому при первом вызове
matrix.append(formatter.format(formatString.toString(), strings));
он добавляет row1 в буфер форматирования, а затем добавляет его в матрицу.Вызовите его еще раз, и он добавляет строку 2 в буфер, но теперь буфер содержит строки 1 и 2, поэтому обе строки добавляются в матрицу, которая теперь имеет строку 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
, но не добавит его ни в один буфер.Таким образом, на каждой итерации цикла к матрице добавляется только последняя созданная строка, что является ожидаемым результатом.
TL; DR: formatter.format
добавляет отформатированную строку во внутренний буфер, а затем выводит весь буфер,в то время как String.format
просто выводит отформатированную строку.