2016-07-20 13 views
1

Wirklich grün hier. Ich versuche, eine Regex zu bekommen, die in Notepad ++ funktioniert, um in Java mit BlueJ zu laufen, aber Java scheint es zu ignorieren. Ich benutze andere replaceAll Funktionen mit regulären Ausdrücken, und alle diese funktionieren.Java ignoriert Regex, um doppelte Zeilen mit BlueJ zu entfernen

Ich habe dies, aber es sagt mir, die \ s ist ein illegales Escape-Zeichen:

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

ich über die Java-Engine gelesen und verändern die \ s \ s so war es nicht illegal:

Ich habe versucht, stattdessen [[: Leerzeichen:]], aber es tut immer noch nicht die Funktion ersetzen.

Dieses Java-Tool verarbeitet Hunderte von Zeilen, und Benutzer haben Probleme mit Notepad ++, um die doppelten Zeilen zu entfernen. Ich dachte, dass es vielleicht die Probleme beseitigen würde, wenn man es im Formatierungstool macht. Hier ist ein Beispiel für den Text:

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

Ich fand einen ähnlichen Thread, der Ihnen helfen könnte. Http://stackoverflow.com/questions/1573361/find-duplicate-lines-and-remove-using-regular-expression-with-replace-feature – lsiva

+0

Vielen Dank. Ich lese es gerade. – PatrickD

Antwort

1

Sie müssen mehrzeiligen Modus verwenden, so kann ^ den Anfang jeder Zeile entsprechen. Ansonsten stimmt es nur mit dem Anfang der ganzen Zeichenfolge überein. Der Mehrzeilenmodus ist in den meisten Texteditoren der Standard, aber an anderen Stellen müssen Sie ihn angeben. Fügen Sie einfach (?m) zum Anfang der Regex:

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

Wenn Sie mit Java 8, empfehle, ich diese stattdessen:

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

\s* mehrdeutig, weil es Zeilenumbrüche auch bieten kann als Räume; \h passt nur horizontal Leerzeichen (z. B. Leerzeichen und Tabs).

\R Matches jede Art von Newline: \r\n, \n, \r oder mehrere andere, weniger gewöhnlichsten. Die innere Gruppe (\R) erfasst den letzten der redundanten Zeilenumbrüche und "$1" schließt ihn wieder an. Auf diese Weise werden Sie keine bösen Überraschungen erleben, wenn jemand das Newline-Format Ihrer Dokumente ändert.

+0

Vielen Dank, es funktioniert wie ein Charme! Ich arbeite seit über einem Tag daran, verschiedene Dinge zu lesen und auszuprobieren. Ich schätze deine Hilfe sehr. – PatrickD

Verwandte Themen