以下代码在Java 8和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
为什么?
\R
是贪婪的,而在9中则不是。 - user319799System.getProperty("line.separator")
得到什么字符串? - Sergey Kalinichenko\R
是换行匹配器,它将匹配OP拥有的任何内容。 - Makoto\R
时,不允许回溯并将单个CR LF序列分成两部分,因为如果有LF跟随,则禁止仅匹配CR。另一种表达方式是它不能回溯。Java 8是正确的;据我所知,Java 9现在与tr18不符。 - tchrist