我需要以表格/网格格式显示列表,因此我使用String.format()
,如下例所示,
how to print object list to file with formatting in table format using java
我的问题是我需要强制将输出包装为80个字符。表格的最大宽度为80,任何进一步的输出必须在下一行继续。
这可能吗?
当前代码,未实现包装:
StringBuilder sbOutput = new StringBuilder();
sbOutput.append(String.format("%-14s%-200s%-13s%-24s%-12s", "F1", "F2", "F3", "F4", "F5"));
for (MyObject result: myObjects) {
sbOutput.append(String.format("%-14s%-200s%-13s%-24s%-12s", result.getF1(),
result.getF2(), result.getF3(), result.getF3(), result.getF4()));
}
答案 0 :(得分:5)
你可以每隔80个字符将一个换行符注入一个字符串:
str.replaceAll(".{80}(?=.)", "$0\n");
所以你的代码会变成:
sbOutput.append(String.format("%-14s%-200s%-13s%-24s%-12s", result.getF1(),
result.getF2(), result.getF3(), result.getF3(), result.getF4())
.replaceAll(".{80}(?=.)", "$0\n"));
搜索正则表达式意味着" 80个字符跟随"和"$0"
在替换手段"搜索匹配的所有内容"。
(?=.)
是向前看,断言匹配后面跟着任何一个字符,这会阻止输出是80个字符的精确倍数,后面会添加一个不必要的换行符。