我目前使用此代码将行限制为20个字符:
if (string.length() % 20 == 0 && string.length() >= 20) {
this.string += "\n";
}
然而,它打破了这样的话:
Hello, my name is Pa
trick
我该如何防止这种情况?
答案 0 :(得分:9)
您可以使用此.{1,20}(\W|$)
这样的正则表达式来分割接近20个字符的短语,但不会分割单词。
这将最多20个字符。如果您要配置数字,可以在正则表达式中对其进行参数化,例如"(.{1," + max + "}(\\W|$))"
,其中max
是您的限制。
String s = "Hello, my name is Patrick and I have a lot to say, but I will tell you that another day.";
Matcher m = Pattern.compile("(.{1,20}(\\W|$))").matcher(s);
StringBuilder b = new StringBuilder();
while (m.find()) {
b.append(m.group()).append("\n");
}
System.out.println("-> " + b.toString());
将打印出来:
-> Hello, my name is
Patrick and I have a
lot to say, but I
will tell you that
another day.
修改强>
我编辑了上面的答案,实际上它正在搜索一个不在单词\W
中的字符,在我的例子中,字符串以.
结尾但不在你的字符中。我编辑了上面的正则表达式,这样如果字符串以\W
中没有表示的字符结尾,并在$
的字符串末尾添加条件,它也会起作用。
您可以在此处看到一个可运行的示例:http://ideone.com/Nw2aNr
答案 1 :(得分:3)
用s.split("\\s+")
的空格拆分一个字符串,然后逐字逐句追加该行的长度。
答案 2 :(得分:1)
我想这是每次附加字符时的一段代码。所以,要解决这个问题,你应该做一些更有趣的事情。基本思路是:
String words[] = line.split("\\s+");
lastIndexOf(words[words.length - 1]);
获取该行的子字符串,这样就可以保留除最后一个字之外的所有内容。