2

扩展这个答案,使用这个正则表达式(?<=\\G.{" + count + "});我还想修改表达式以不在中间拆分单词。

例子:

String string = "Hello I would like to split this string preserving these words";

如果我想分成 10 个字符,它看起来像这样:

[Hello I wo, uld like t, o split th, is string , preserve, these wor, ds]

问题:

这甚至可以使用 only regex,还是需要词法分析器或其他一些字符串操作?

更新

这就是我想用它的:

+ --------------------------------------------JVM 信息---- -------------------------------------------------- +
 | sun.boot.class.path : C:\Program Files\Java\jdk1.6.0_33\jre\lib\resources.jar;C:\Program Files\Java\ |
 | jdk1.6.0_33\jre\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_33\jre\lib\sunrsasig |
 | n.jar;C:\Program Files\Java\jdk1.6.0_33\jre\lib\jsse.jar;C:\Program Files\Java |
 | \jdk1.6.0_33\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_33\jre\lib\charset |
 | s.jar;C:\Program Files\Java\jdk1.6.0_33\jre\lib\modules\jdk.boot.jar;C:\Progra |
 | m 文件\Java\jdk1.6.0_33\jre\classes |
 + -------------------------------------------------- -------------------------------------------------- - +

它周围的框有字符限制减去键宽度,但这看起来不太好。这个例子也不是唯一的用例,我用那个框来处理多种类型的信息。

4

3 回答 3

3

我已经看过这个问题,但这些回复都没有真正说服我!这是我的版本。很有可能可以改进。

public static String[] splitPresenvingWords(String text, int length) {
    return text.replaceAll("(?:\\s*)(.{1,"+ length +"})(?:\\s+|\\s*$)", "$1\n").split("\n");
}
于 2016-11-14T22:19:47.723 回答
2

“中间不拆分单词”没有定义在“不拆分”的情况下应该发生什么。

给定分割长度为 10 和字符串:

Hello I would like to split this string preserving these words

如果要在一个单词后立即拆分,则生成列表:

Hello I would, like to split, this string, preserving, these words

您可以通过使用普通匹配来完成各种棘手的“拆分”。

只需匹配此表达式的所有出现:

(?s)\G.{10,}?\b

(?s)用于打开DOTALL标志。)

在 Perl 中它就像 一样简单@array = $str =~ /\G.{10,}?\b/gs,但 Java 似乎缺少返回所有匹配项的快速函数,因此您可能必须使用匹配器并将结果推送到数组/列表中。

于 2012-09-06T14:41:00.453 回答
1

没有正则表达式,但它似乎工作:

List<String> parts = new ArrayList<String>();
while (true) {
    // look for space to the left of n-th character
    int index = string.lastIndexOf(" ", n);
    if (index == -1) {
        // no space to the left (very long word) -> next space to the right
        // change this to 'index = n' to break words in this case
        index = string.indexOf(" ", n);
    }
    if (index == -1) {
        break;
    }
    parts.add(string.substring(0,  index));
    string = string.substring(index+1);
}
parts.add(string);

这将首先查看第 n 个字符的左侧是否有空格。在这种情况下,字符串在那里被分割。否则,它会寻找右边的下一个空格。或者,您可以在这种情况下打破这个词。

于 2012-09-06T09:10:18.163 回答