2012-03-31 2 views
0

У меня есть конкретная проблема с общей консольной печатью, и мне было интересно, есть ли у кого-то решение для нее. Я пытаюсь напечатать dataTable, который будет выглядеть следующим образом:Отложенная печать на Java

Table 
---------------------- 
Name |Surname  | 
---------------------- 
Mike |Mikhailowish| 
Rafaello|Mirena  | 

и так далее. Чтобы распечатать границу панели, мне нужно знать, какова максимальная длина каждого значения столбца. Я не хочу проходить через всю базу данных, чтобы найти это, а затем снова распечатать. Я бы скорее хотел бы сделать STH как:

System.out.printLater(s); //herejust leave a pointer to a StringBuilder you will build 
... 
s.append("--------"); 
... 
System.out.printAllDeferred(); 

Я понимаю, что выше, вероятно, в 99,99999% шансов невозможно, но, возможно, вы, ребята, есть умный способ достижения выше?

+0

Если бы это было возможно, тогда это было бы другим опытом пользователя. Возможно, вы можете напечатать «Имя | Фамилия» ... итерации через базу данных, когда вы найдете строку с длиной столбца, большей, чем предыдущий макс, напечатайте целую кучу backspaces (стирая предыдущую работу) и перепечатайте таблицу с правильным интервалом. Для вас было бы очень много работы, и я не думаю, что пользователь оценил бы это. – emory

+0

Ну да, это то, чего я хотел избежать ... – Bober02

ответ

2

Вы можете обернуть PrintStream вокруг ByteArrayOutputStream, а затем использовать эту PrintStream вместо System.out (или используйте System.setOut) для печати на ней. Позже вы можете напечатать весь массив байтов.

Но это не поможет вам, так как вам нужно будет отрегулировать все столбцы; лучше собрать все ячейки из db в массив и рассчитать максимальные длины, а затем распечатать массив.

1

Возможно, вы могли бы узнать, какова будет максимальная длина каждого столбца в первую очередь, если дополнительные запросы вас не беспокоят.

for (String name : columnNames) { 

    select max(LEN(columnName)) as maxchar from YourTable 

} 

В противном случае, как и другие предполагают, вы можете просто прочитать всю таблицу в памяти первой, и при этом, что вычислить длину макс конкретного столбца, в зависимости от того, вашего размера кучи достаточно и с большим полная таблица в памяти не является проблемой.

Но это действительно зависит от домена вашей проблемы, какой подход лучше всего.

Смежные вопросы