java - 在 Java 中使用 RegEx 时出现模式错误

标签 java regex

我在使用正则表达式时遇到了一个问题。 我的要求是:将一个长字符串拆分为最大 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/

相关文章:

java - 使用 OpenJPA 从数据库中未检索到主键(ID)(?)

java - 下面的代码是如何发生死锁的?

java - 如何使用 Selenium 在 PhantomJS 中设置代理身份验证?

javascript - 正则表达式封装不在括号内的内容

sql - 正则表达式/解析PostgreSQL名称

sql - Oracle 正则表达式从表中提取行

java - 在输入参数是引用的情况下如何重用代码?

Java 等待/通知

c++ - NetBIOS 名称正则表达式

javascript - 使用javascript替换@后跟的文本