阿拉伯语等 RTL 语言环境中负数的 NumberFormating 问题

问题描述 投票:0回答:1
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) 中的负数?

java number-formatting arabic parseexception
1个回答
0
投票

从 Java 9 开始,JDK 优先处理 CLDR locale 数据。 (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 更改也会影响在瑞典解析负数,在德国解析一周的第一天,可能还有很多其他事情。

© www.soinside.com 2019 - 2024. All rights reserved.