import java.text.NumberFormat;
import java.util.Arrays;
class Test {
public static String toTableString
(int data
[][]) { int max = 0;
for (int i = 0; i < data.length; i++)
for (int is : data[i])
if (max < is)
max = is;
return toTableString
(data,
Integer.
toString(max
).
length()); }
public static String toTableString
(int data
[][],
int nrLen
) { StringBuilder sb = new StringBuilder();
int max = 0;
nf.setMaximumIntegerDigits(nrLen);
nf.setMinimumIntegerDigits(nrLen);
nf.setGroupingUsed(false);
for (int i = 0; i < data.length; i++)
if (max < data[i].length)
max = data[i].length;
char line[] = new char[(1 + nf.format(0).length()) * (1 + max)];
sb.append(nf.format(0).replace("0", " ")).append('|').append(' ');
for (int i = 0; i < max; i++)
sb.append(nf.format(i)).append(' ');
sb.append("\n").append(line);
for (int i = 0; i < data.length; i++) {
sb.append("\n").append(nf.format(i)).append('|').append(' ');
for (int c : data[i])
sb.append(nf.format(c)).append(' ');
}
return sb.toString();
}
public static void main
(String[] args
) { System.
out.
println(toTableString
(new int[][] { { 1,
2,
3,
4,
5,
6 },
{ 2, 3, 4, 5, 6, 1 }, { 3, 4, 5, 6, 1, 2 },
{ 4, 5, 6, 1, 2, 3 }, { 5, 6, 1, 2, 3, 4 },
{ 6, 1, 2, 3, 4, 5 } }));
System.
out.
println(toTableString
(new int[][] { { 1 },
{ 2,
3 },
{ 3, 4, 5 }, { 4, 5, 6, 1 }, { 5, 6, 1, 2, 3 },
{ 6, 1, 2, 3, 4, 5 } }));
System.
out.
println(toTableString
(new int[][] { { 1 },
{ 20,
300 },
{ 3000, 40000, 50000 }}));
}
}
aW1wb3J0IGphdmEudGV4dC5OdW1iZXJGb3JtYXQ7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwoKY2xhc3MgVGVzdCB7CglwdWJsaWMgc3RhdGljIFN0cmluZyB0b1RhYmxlU3RyaW5nKGludCBkYXRhW11bXSkgewoJCWludCBtYXggPSAwOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykKCQkJZm9yIChpbnQgaXMgOiBkYXRhW2ldKQoJCQkJaWYgKG1heCA8IGlzKQoJCQkJCW1heCA9IGlzOwoKCQlyZXR1cm4gdG9UYWJsZVN0cmluZyhkYXRhLCBJbnRlZ2VyLnRvU3RyaW5nKG1heCkubGVuZ3RoKCkpOwoJfQoKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvVGFibGVTdHJpbmcoaW50IGRhdGFbXVtdLCBpbnQgbnJMZW4pIHsKCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKCQlpbnQgbWF4ID0gMDsKCQlOdW1iZXJGb3JtYXQgbmYgPSBOdW1iZXJGb3JtYXQuZ2V0SW50ZWdlckluc3RhbmNlKCk7CgkJbmYuc2V0TWF4aW11bUludGVnZXJEaWdpdHMobnJMZW4pOwoJCW5mLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKG5yTGVuKTsKCQluZi5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwoKCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspCgkJCWlmIChtYXggPCBkYXRhW2ldLmxlbmd0aCkKCQkJCW1heCA9IGRhdGFbaV0ubGVuZ3RoOwoKCQljaGFyIGxpbmVbXSA9IG5ldyBjaGFyWygxICsgbmYuZm9ybWF0KDApLmxlbmd0aCgpKSAqICgxICsgbWF4KV07CgkJQXJyYXlzLmZpbGwobGluZSwgJ+KAlCcpOwoKCQlzYi5hcHBlbmQobmYuZm9ybWF0KDApLnJlcGxhY2UoIjAiLCAiICIpKS5hcHBlbmQoJ3wnKS5hcHBlbmQoJyAnKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSsrKQoJCQlzYi5hcHBlbmQobmYuZm9ybWF0KGkpKS5hcHBlbmQoJyAnKTsKCgkJc2IuYXBwZW5kKCJcbiIpLmFwcGVuZChsaW5lKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKCQkJc2IuYXBwZW5kKCJcbiIpLmFwcGVuZChuZi5mb3JtYXQoaSkpLmFwcGVuZCgnfCcpLmFwcGVuZCgnICcpOwoJCQlmb3IgKGludCBjIDogZGF0YVtpXSkKCQkJCXNiLmFwcGVuZChuZi5mb3JtYXQoYykpLmFwcGVuZCgnICcpOwoJCX0KCgkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Cgl9CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCVN5c3RlbS5vdXQucHJpbnRsbih0b1RhYmxlU3RyaW5nKG5ldyBpbnRbXVtdIHsgeyAxLCAyLCAzLCA0LCA1LCA2IH0sCgkJCQl7IDIsIDMsIDQsIDUsIDYsIDEgfSwgeyAzLCA0LCA1LCA2LCAxLCAyIH0sCgkJCQl7IDQsIDUsIDYsIDEsIDIsIDMgfSwgeyA1LCA2LCAxLCAyLCAzLCA0IH0sCgkJCQl7IDYsIDEsIDIsIDMsIDQsIDUgfSB9KSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKHRvVGFibGVTdHJpbmcobmV3IGludFtdW10geyB7IDEgfSwgeyAyLCAzIH0sCgkJCQl7IDMsIDQsIDUgfSwgeyA0LCA1LCA2LCAxIH0sIHsgNSwgNiwgMSwgMiwgMyB9LAoJCQkJeyA2LCAxLCAyLCAzLCA0LCA1IH0gfSkpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCVN5c3RlbS5vdXQucHJpbnRsbih0b1RhYmxlU3RyaW5nKG5ldyBpbnRbXVtdIHsgeyAxIH0sIHsgMjAsIDMwMCB9LAoJCQkJeyAzMDAwLCA0MDAwMCwgNTAwMDAgfX0pKTsKCX0KCn0=