Locale locale = new Locale("ar", "AE");
NumberFormat format = NumberFormat.getNumberInstance(locale);
System.out.println(format.parse("55-"));
上面的代码在JDK 8时返回-55,在11时返回55。另外,format.parse("-55")会抛出parseException。知道为什么会这样吗?如何解析负数在阿拉伯语(RTL)与java 11?
从Java 9开始,JDK优先考虑CLDR区域设置数据。(Unicode通用区域数据存储库)
如果您想在Java 8中看到这种行为,您可以使用命令行参数-Djava.locale.providers=COMPAT,SPI,CLDR
这样,它将使用旧的"COMPAT"如果COMPAT没有本地数据,则只使用SPI或CLDR。
https://www.oracle.com/java/technologies/javase/9-relnotes.html jdk - 8008577
同样的java更改也会影响瑞典解析负数,德国解析一周的第一天,可能还会影响许多其他事情。