Groovy删除StringBuilder对象中的额外空行

时间:2016-05-13 19:04:50

标签: regex groovy stringbuilder

尝试从StringBuilder创建的文件中删除超过2个空行的任何额外空行。代码是groovy所以我似乎不明白为什么简单的java程序似乎不起作用。尝试了3件事......有什么建议吗?请参阅下面的代码段

Regex没有做任何事情。

private static final removeExtraLines1(StringBuilder text)
{
    String twoLines = "MIAW";
    Pattern extraLines = Pattern.compile("\n")
    text.replaceAll(extraLines, twoLines);
}

我自己的方法,deleteCharAt也不起作用?

private void removeExtraLines(StringBuilder text)
{
    int i = 0;
    while(i < text.length()-1)
    {
        if(text.charAt(i) == System.lineSeparator() && text.charAt(i++) == System.lineSeparator())
        {
            text.deleteCharAt(i++);
            System.out.println("REPLACED AN EMPTY LINE");
        }
    }
}

修改toString()方法表示不推荐使用regex方法replaceAll。

@Override 
String toString()
{
    def padding = " " * (4 * (level - 1) )
    padding + "cat level $level [$title]: " + 
        contained.collect { 
            it.toPaddedString(padding) }

    ////My Code
    String twoLines = System.lineSeparator()+System.lineSeparator();
    Pattern extraLines = Pattern.compile(System.lineSeparator()+ System.lineSeparator()+ System.lineSeparator()+System.lineSeparator()) 
    _toString().replaceAll(extraLines, twoLines)
}

2 个答案:

答案 0 :(得分:3)

这里的问题是每种方法都有错误:

  1. replaceAll()不会修改StringBuilder。相反,它会返回一个新的String。此外,正则表达式不正确。
  2. Vijay所述的不正确使用后期/预增量。
  3. 好的,我不知道。我放弃了尝试理解第三种方法。
  4. 最简单的方法是将replaceAll()与正确的正则表达式一起使用,然后使用replace()获取replaceAll()的输出,并使其成为StringBuilder的全部内容}:

    private static final removeExtraLines1(StringBuilder text) {
        text.replace(0, text.size(), builder.replaceAll('\n\n', '\n'))
    }
    

答案 1 :(得分:1)

你需要使用++ i(预增量)而不是i ++(增量后增加)

Longitude

结帐Pre & post increment operator behavior in C, C++, Java, & C#