1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public static void printTable(Object[][] array, CharSequence delimiter, CharSequence prefix, CharSequence suffix, String rowseparator, String...titles) {
int[] width = new int[Arrays.stream(array).mapToInt(a->a.length).max().orElse(0)];
for(int i=0; i<width.length; i++) {
final String title = i<titles.length?titles[i]:"";
final int fi = i;
width[i]=Math.max(title.length(), Arrays.stream(array).map(a->a.length>=fi?a[fi]:"").filter(Objects::nonNull).map(String::valueOf).mapToInt(String::length).max().orElse(1));
}
int linelength = 0;
if ( rowseparator!=null && !rowseparator.isEmpty() ) {
linelength = Arrays.stream(width).sum() + width.length-1*delimiter.length() + prefix.length() + suffix.length();
}
else {
linelength = 0;
}
if ( linelength>0 ) {
System.out.println(rowseparator.repeat(linelength).substring(0, linelength));
}
if ( titles.length>0 ) {
printRow(titles, width, delimiter, prefix, suffix);
}
if ( linelength>0 ) {
System.out.println(rowseparator.repeat(linelength).substring(0, linelength));
}
for(Object[] row : array) {
printRow(row, width, delimiter, prefix, suffix);
}
if ( linelength>0 ) {
System.out.println(rowseparator.repeat(linelength).substring(0, linelength));
}
}
private static void printRow(Object[] row, int[] width, CharSequence delimiter, CharSequence prefix, CharSequence suffix) {
StringJoiner sj = new StringJoiner(delimiter, prefix, suffix);
for(int i=0; i<width.length; i++) {
if ( width[i]==0 ) {
sj.add("");
}
else {
if ( i<row.length ) {
sj.add(String.format("%1$"+width[i]+"s", row[i]).replace('0', ' '));
}
else {
sj.add(" ".repeat(width[i])); // Java 11, pour avant faire
// sj.append(String.format("%1$"+width[i]+"s", "").replace('0', ' ')); // Java <11
}
}
}
System.out.println(sj.toString());
} |
Partager