4

我想格式化一个字符串,准备好输出到终端窗口。终端窗口本身不会自动换行,所以我想在字符串中插入换行符。

有没有办法使用该String.format()方法来实现这一点?

编辑:只是为了澄清。我不想将换行符硬编码到字符串中。

我想从这样的输入中去:

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。Exceptioneur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est labourum。

对于这样的输出:

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor \n incididunt ut labore et dolore magna aliqua。Ut enim ad minim veniam, quis nostrud \n exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。Duis aute irure \n dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。\n Exceptioneur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt \n mollit anim id est labourum。

(强调可读性)

4

4 回答 4

3

我建议您使用现有的库,例如 Apache Commons Lang WordUtils.wrap()而不是自己使用String.format().

于 2013-08-21T09:14:19.703 回答
3

无法使用 插入换行符String.format,但您可以使用正则表达式来执行此操作。例如,这会将字符串拆分为最多 50 个字符的行,最多由空格分隔:

str += "\n"; // Needed to handle last line correctly
str = str.replaceAll("(.{1,50})\\s+", "$1\n");

但它并不完美;例如,长于最大值的“单词”不会被拆分。

于 2013-08-21T11:04:00.350 回答
2

我想我有一个解决方案给你:你可以使用正则表达式拆分你的行以返回一个固定长度的字符串数组。这是表达式:

final String[] fixedLengthLines = line.split("(?<=\\G.{" + lineLength + "})");

然后,您只需在需要时输出附加 \n 的字符串数组。

这仅在您的输出终端当然显示固定大小的字符时才有效:)

注意:它来自这里:Split string to equal length substrings in Java

于 2013-08-21T09:18:26.960 回答
0

如果我正确理解了这个问题,您需要%n在格式模式中使用平台特定的行分隔符。

于 2013-08-21T10:01:49.503 回答