表格显示的Java格式字符串:包裹在80个字符

时间:2015-10-07 15:53:24

标签: java textwrapping

我需要以表格/网格格式显示列表,因此我使用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()));
}

1 个答案:

答案 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个字符的精确倍数,后面会添加一个不必要的换行符。