Как гласит название, есть ли простой способ вывода двух столбцов в консоль на Java?
Я знаю \t
, но я не нашел путь к пространству на основе определенного столбца при использовании printf.
Как гласит название, есть ли простой способ вывода двух столбцов в консоль на Java?
Я знаю \t
, но я не нашел путь к пространству на основе определенного столбца при использовании printf.
Используйте спецификаторы ширины и точности, заданные для одного и того же значения. Это приведет к слишком коротким строкам и усечению строк, которые слишком велики. Флаг '-' будет выравнивать значения в столбцах.
System.out.printf("%-30.30s %-30.30s%n", v1, v2);
Я сделал это без использования класса Formatter как:
System.out.printf("%-10s %-10s %-10s\n", "osne", "two", "thredsfe");
System.out.printf("%-10s %-10s %-10s\n", "one", "tdsfwo", "thsdfree");
System.out.printf("%-10s %-10s %-10s\n", "onsdfe", "twdfo", "three");
System.out.printf("%-10s %-10s %-10s\n", "odsfne", "twsdfo", "thdfree");
System.out.printf("%-10s %-10s %-10s\n", "osdne", "twdfo", "three");
System.out.printf("%-10s %-10s %-10s\n", "odsfne", "tdfwo", "three");
и вывод был
osne two thredsfe
one tdsfwo thsdfree
onsdfe twdfo three
odsfne twsdfo thdfree
osdne twdfo three
odsfne tdfwo three
Поздний ответ, но если вы не хотите жестко кодировать ширину, как насчет того, что работает так:
public static void main(String[] args) {
new Columns()
.addLine("One", "Two", "Three", "Four")
.addLine("1", "2", "3", "4")
.print()
;
}
И отображает:
One Two Three Four
1 2 3 4
Ну все, что требуется:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Columns {
List<List<String>> lines = new ArrayList<>();
List<Integer> maxLengths = new ArrayList<>();
int numColumns = -1;
public Columns addLine(String... line) {
if (numColumns == -1){
numColumns = line.length;
for(int i = 0; i < numColumns; i++) {
maxLengths.add(0);
}
}
if (numColumns != line.length) {
throw new IllegalArgumentException();
}
for(int i = 0; i < numColumns; i++) {
maxLengths.set( i, Math.max( maxLengths.get(i), line[i].length() ) );
}
lines.add( Arrays.asList(line) );
return this;
}
public void print(){
System.out.println( toString() );
}
public String toString(){
String result = "";
for(List<String> line : lines) {
for(int i = 0; i < numColumns; i++) {
result += pad( line.get(i), maxLengths.get(i) + 1 );
}
result += System.lineSeparator();
}
return result;
}
private String pad(String word, int newLength){
while (word.length() < newLength) {
word += " ";
}
return word;
}
}
Так как он не будет печататься до тех пор, пока он не будет иметь все строки, он сможет узнать, как широко использовать столбцы. Нет необходимости жестко кодировать ширину.