在第n个字符处拆分字符串保留字

时间:2012-09-06 08:52:50

标签: java regex split

使用此正则表达式(?<=\\G.{" + count + "})扩展此answer;我还想将表达式修改为而不是在中间拆分。

示例:

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

如果我要拆分10个字符,它将如下所示:

  

[你好我,我喜欢t,o分裂,是字符串,保留,这些烦恼,ds]

问题:

这是否只能使用regex,或者是否需要词法分析器或其他字符串操作?

更新

这就是我想用它:

 + -------------------------------------------JVM Information------------------------------------------ + 
 | 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 Files\Java\jdk1.6.0_33\jre\classes                                           | 
 + ---------------------------------------------------------------------------------------------------- + 

它周围的框有字符限制减去键宽,但这看起来不太好。此示例也不是唯一的用例,我将该框用于多种类型的信息。

3 个答案:

答案 0 :(得分:3)

我已经看过这个问题了,这些回复实际上并没有让我信服!这是我的版本。它很可能会得到改善。

public static String[] splitPresenvingWords(String text, int length) {
    return text.replaceAll("(?:\\s*)(.{1,"+ length +"})(?:\\s+|\\s*$)", "$1\n").split("\n");
}

答案 1 :(得分: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似乎缺少一个返回所有匹配的快速函数,因此您可能必须使用匹配器并将结果推送到数组/列表。 / p>

答案 2 :(得分: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个字符左侧是否有空格。在这种情况下,字符串在那里分开。否则,它会查找右侧的下一个空格。或者,在这种情况下你可以打破这个词。