【问题标题】:Is automatic line break with string formatter possible?是否可以使用字符串格式化程序自动换行?
【发布时间】:2013-08-23 13:56:47
【问题描述】:

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

有没有办法使用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 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 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。

(强调可读性)

【问题讨论】:

    标签: java string string-formatting


    【解决方案1】:

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

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

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

    【讨论】:

    • 已接受。我最终使用了 WordUtils.wrap() 方法,但这与我在问题中要求的最接近。
    • java.text.BreakIterator 类会提供更好的结果——例如,它知道可以在连字符后中断——但使用它需要在循环中迭代字符串 docs.oracle.com/javase/tutorial/i18n/text/line.html
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

      • 这有分裂整个单词的缺点。
      • 这是一个不错的解决方案。如果我仅限于本地方法,我可能会使用它,但是 WordUtils 类太方便了:)
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-04
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多