Java FRANCE/FRENCH Locale千位分隔符看起来像空间但实际上并不是

Kau*_*ele 8 java locale number-formatting

如果我在FRANCE/FRENCH语言环境中转换一个数字,它应该使用空格作为千​​位分隔符.如果我尝试用其他字符替换空格,则找不到任何空格.

String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123);
System.out.println("String after conversion in locale "+input);
input = input.replace(" ", ".");
System.out.println("After replace space with dot      "+input);
Run Code Online (Sandbox Code Playgroud)

OUTPUT

String after conversion in locale 123 123 123
After replace space with dot      123 123 123
Run Code Online (Sandbox Code Playgroud)

因此,虽然分隔符看起来像空间,但它是不同的.什么是确切的字符?如何在input.replace()中指定该字符,以便我可以用点替换它?

Joo*_*gen 10

它是\u00a0一个不间断的空间,对于一定数量来说是有意义的.(想象一下,在一行结束时为40欧元,下一行以000开头.)其他一些语言也是如此.

input = input.replace('\u00a0', '.');
Run Code Online (Sandbox Code Playgroud)


Kau*_*ele 6

正如Joop Eggen在他的回答中所建议的,这是\u00a0不间断的空间。

作为一种解决方法,我得到了千位分隔符如下

String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123);
System.out.println("String after conversion in locale "+input);

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
char thousandSep = symbols.getGroupingSeparator();

input = input.replace(thousandSep, '.'); 
Run Code Online (Sandbox Code Playgroud)

它按预期工作

String after conversion in locale 123 123 123
After replace space with dot      123.123.123
Run Code Online (Sandbox Code Playgroud)