使用此正则表达式(?<=\\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 | + ---------------------------------------------------------------------------------------------------- +
它周围的框有字符限制减去键宽,但这看起来不太好。此示例也不是唯一的用例,我将该框用于多种类型的信息。
答案 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个字符左侧是否有空格。在这种情况下,字符串在那里分开。否则,它会查找右侧的下一个空格。或者,在这种情况下你可以打破这个词。