java NumberFormating问题与负数在RTL区域设置,如阿拉伯语

rhfm7lfc  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(145)
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。你知道为什么会有这种变化吗?如何用java 11解析阿拉伯语(RTL)中的负数?

h6my8fg2

h6my8fg21#

从Java 9开始,JDK优先考虑CLDR语言环境数据。(Unicode通用区域设置数据存储库)
如果您想获得Java8中的行为,可以使用命令行参数-Djava.locale.providers=COMPAT,SPI,CLDR
这样,它将使用旧的“COMPAT”区域设置数据,并且仅在COMPAT没有您的区域设置数据时使用SPI或CLDR。
https://www.oracle.com/java/technologies/javase/9-relnotes.html#JDK-8008577
同样的java变化也影响了瑞典的负数解析,德国的一周的第一天,可能还有很多其他的事情。

相关问题