簡體   English   中英

Groovy在StringBuilder對象中刪除多余的空行

[英]Groovy removing extra empty lines in StringBuilder Object

嘗試刪除由StringBuilder制作的文件中2個空行以外的所有多余空行。 該代碼是普通的,所以我似乎不明白為什么簡單的Java過程似乎不起作用。 嘗試了3件事...有什么建議嗎? 請參閱下面的代碼段

正則表達式不執行任何操作。

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)
}

這里的問題是每種方法都有一個錯誤:

  1. replaceAll()不會修改StringBuilder 而是返回一個新的String 另外,正則表達式不正確。
  2. 如Vijay所言,后期/預增量的使用不當。
  3. 好,我不知道 我放棄了嘗試去理解第三種方法。

最簡單的方法是使用帶有適當正則表達式的replaceAll() ,然后使用replace()獲取replaceAll()的輸出,並使其成為StringBuilder的全部內容:

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

您需要使用++ i(預增量)而不是i ++(后增量)

       if(text.charAt(i) == System.lineSeparator() && text.charAt(++i) == System.lineSeparator())
        {
            text.deleteCharAt(++i);
            System.out.println("REPLACED AN EMPTY LINE");
        }

在C,C ++,Java和C#中檢出前后遞增運算符的行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM