可以使用字符串格式化程序自动换行吗?

时间:2013-08-21 09:09:03

标签: java string string-formatting

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

有没有办法使用String.format()方法实现这一目标?

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

我想从像这样的输入:

  

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 repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。

输出如下:

  

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 练习ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure \ n dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 \ n Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt \ n mollit anim id est laborum。

(强调可读性)

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

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

虽然不完美;例如,比最大值更长的“单词”不会被分割。

答案 2 :(得分:2)

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

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

然后你只需要输出你需要的字符串数组。

仅当输出终端显示固定大小的字符时才会起作用:)

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

答案 3 :(得分:0)

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