2016-07-20 23 views
1

這裏真的很綠。我試圖得到一個在Notepad ++中使用BlueJ運行在Java中的正則表達式,但是Java似乎忽略了它。我正在使用其他replaceAll函數使用正則表達式,並且所有這些都在工作。Java正在忽略使用BlueJ去除重複行的正則表達式

我有這個,但它告訴我\ s是一個非法的轉義字符:

itemList[i] = itemList[i].replaceAll("^(\s*\r\n){2,}", "\r\n"); 

我讀到的Java引擎,改變了\ s到\ S所以並不違法:

itemList[i] = itemList[i].replaceAll("^(\\s*\r\n){2,}", "\r\n"); 

我嘗試使用[[:空間:]代替,但是,它仍然沒有做替換功能。

itemList[i] = itemList[i].replaceAll("^([[:space:]]*\r\n){2,}", "\r\n"); 

這個Java工具正在處理數百行代碼,並且人們在使用Notepad ++刪除重複行時遇到了問題。我想可能在格式化工具中這樣做會消除這些問題。這裏是文字的例子:

1. Modification: No Error Message When SQL Server Down 

       S9# 395 


       Summary 

       No error message when the SQL Server is 
       down. 

       Workaround 

       There is currently no 
       workaround for this issue. The system will become 
       unusable if SQL server is down. 
+0

我發現了一個類似的線程,可以幫助您.http://stackoverflow.com/questions/1573361/find-duplicate-lines-and-remove-using-regular-expression-with-replace-feature – lsiva

+0

謝謝。我正在閱讀它。 – PatrickD

回答

1

您需要使用多行模式,所以^可以匹配任何行的開頭。否則它只匹配整個字符串的開頭。多行模式是大多數文本編輯器的默認模式,但在其他任何地方使用正則表達式時,您必須指定它。只需添加(?m)的正則表達式的開頭:

(?m)^(\\s*\r\n){2,} 

如果你正在運行的Java 8,我建議這樣做,而不是:

replaceAll("(?m)^(?:\\h*(\\R)){2,}", "$1") 

\s*是模糊的,因爲它可以匹配換行符以及空間; \h只匹配水平空格(例如空格和製表符)。

\R匹配任何種類的換行符:\r\n,\n\r或其他幾個不太常見的換行符。內部組(\R)捕獲最後一個冗餘換行符,並且"$1"將其插回。這樣,如果有人更改了文檔的換行格式,則不會產生任何令人討厭的意外。

+0

非常感謝,它就像一個魅力!我一直在努力研究這一點,爲期一天的閱讀和嘗試不同的事情。我真的很感謝你的幫助。 – PatrickD