次のコードはJava 8 & 9でコンパイルされますが、動作は異なります。なぜ RはJava 8とJava 9の間の正規表現で異なった動作をしますか?
class Simple {
static String sample = "\nEn un lugar\r\nde la Mancha\nde cuyo nombre\r\nno quiero acordarme";
public static void main(String args[]){
String[] chunks = sample.split("\\R\\R");
for (String chunk: chunks) {
System.out.println("Chunk : "+chunk);
}
}
}
私は、Java 8でそれを実行すると、それが返されます。
Chunk :
En un lugar
de la Mancha
de cuyo nombre
no quiero acordarme
しかし、私は、Java 9でそれを実行すると出力が異なります。
Chunk :
En un lugar
Chunk : de la Mancha
de cuyo nombre
Chunk : no quiero acordarme
なぜ?
Java 8のように見える '\ R'は欲張りですが、9ではそうではありません。 – doublep
'System.getProperty(" line.separator ")'からどんな文字列を取得しますか? – dasblinkenlight
@dasblinkenlight:それは問題ではありません。 '\ R'は[改行マッチャー](https://docs.oracle.com/javase/9/docs/api/java/util/regex/Pattern.html)です。それはOPがそこにあるものと一致します。 – Makoto