我在使用正则表达式时遇到了一个问题。 我的要求是:将一个长字符串拆分为最大 125 个字母的大小,然后在它们之间插入一个换行符。 拆分时,不应在单词之间拆分。简而言之,我想将一个字符串拆分为长度为 125 或第 125 个字母之前的单词末尾的小字符串。希望我没有混淆
我用了一个正则表达式来解决这个问题,相信我在这方面绝对是零。 我刚得到一个代码并复制粘贴 ;-)
StringBuffer result = null;
while(mailBody.trim().length() > 0){
Matcher m = Pattern.compile("^.{0,125}\\b").matcher(mailBody);
m.find();
String oneLineString = m.group(0);
if(result == null)
result = new StringBuffer(oneLineString);
else
result.append("\n"+ oneLineString);
mailBody = mailBody.substring(oneLineString.length(),
mailBody.length()).trim();
}
这是我的代码,除非起始字符串以句号 (.) 结尾,否则它运行良好。 在这种情况下,它会给出如下错误:找不到匹配项。
请帮忙。
问候, 阿努普 PK
最佳答案
我还不能评论,给出的答案很好。我要补充一点,您应该在循环之前初始化您的 StringBuffer 并减少复制,启动它至少与原始字符串一样大,如下所示:
StringBuffer result = new StringBuffer(mailBody.length());
然后在循环中就不需要检查 result == null
。
编辑:评论 PSpeed 答案... 需要在添加的每个新行中添加新行以匹配原始行,就像这样(假设结果已经按照我的建议进行了初始化):
while (m.find()) {
if (result.length() > 0)
result.append("\n");
result.append(m.group().trim());
}
关于java - 在 Java 中使用 RegEx 时出现模式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1886175/