在最后一个空格或超过最大值后拆分长字符串

时间:2020-06-01 19:53:41

标签: regex

我正在尝试根据行数限制将长字符串分成较小的块。以下面为例

这是一个长标头。它是有目的的。目的是测试拆分是否正确。它应该远远超过线路限制。如果更短,则不会测试该限制。

如果行数限制为70,则应拆分为

这是一个长标头。它是有目的的。目的是测试

拆分正确。应该很好了

限制。如果更短,则不会测试该限制。

我想到的正则表达式如下,但是有问题。

(\S*?.{1,70}(\s|\Z))

https://regex101.com/r/Vr5QNZ/3/

如果一个单词由于某种原因太长,它将不会分裂,因为它只寻找空白。举例来说,如果我将这个问题的网址放在字符串中(将h删除到http中,以便它实际显示)

ttps://stackoverflow.com/questions/7528045/large-string-split-into-lines-with-maximum-length-in-java 备注这是一个长标头。它是有目的的。目的是测试 请注意,分割工作正常。应该很好 备注限制。如果更短,则不会测试该限制。

输出为

ttps://stackoverflow.com/questions/7528045/large-string-split-into-lines-with-maximum-length-in-java

这是一个长标头。它是有目的的。目的是测试

拆分正确。应该很好了

限制。如果更短,则不会测试该限制。

第一行超出了70个字符的限制,并且由于没有空格可拆分,因此仅超过了70个字符。我希望如果在用完70个字符之前存在一个空格,或者如果不存在则在空白处拆分,然后在70个字符标记处拆分。正确的示例看起来像

ttps://stackoverflow.com/questions/7528045/large-string-split-into-lin

Java中的最大长度这是一个长标头。

很久了

目的。目的是测试拆分是否有效

正确。它应该远远超过线路限制。如果是

更短,则它不会测试该限制。

1 个答案:

答案 0 :(得分:1)

不确定我是否理解这个问题,但这是否可以解决您的问题:(\ S *?[^] {1,70}(\ s | \ Z |))