Nie można dopasować łańcucha zawierającego znaki nowej linii, gdy linia jest otrzymana za pomocą obiektu %n
w obiekcie Formatter
lub String.format()
. Proszę spojrzeć na następujący program:Wyrażenie regularne nie pasuje do znaku nowej linii uzyskanego z obiektu Formatter
public class RegExTest {
public static void main(String[] args) {
String input1 = String.format("Hallo\nnext line");
String input2 = String.format("Hallo%nnext line");
String pattern = ".*[\n\r].*";
System.out.println(input1+": "+input1.matches(pattern));
System.out.println(input2+": "+input2.matches(pattern));
}
}
a jego produkcja:
Hallo
next line: true
Hallo
next line: false
Co tu się dzieje? Dlaczego drugi ciąg nie pasuje?
Wersja Java to 1.6.0_21.
Więc dlaczego pierwszy mecz (Jestem na windows) ? – Axel
Ponadto, możesz chcieć zmienić część '[\ r \ n]' na '\ r? \ N', aby móc dopasować zarówno' \ n' jak i '\ r \ n'. – Keppil
Właśnie się dowiedziałem. W systemie Windows lineend to '\ r \ n'. '\ N' w' input1' nie jest uważany za koniec linii, więc wyrażenie regularne jest zgodne. – Axel