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

如果我在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); 

OUTPUT

 String after conversion in locale 123 123 123 After replace space with dot 123 123 123 

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

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

 input = input.replace('\u00a0', '.'); 

正如Joop Eggen在他的回答中所建议的那样,这是一个不间断的空间。

作为一种解决方法,我得到了千分离器,如下所示

 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, '.'); 

它按预期工作

 String after conversion in locale 123 123 123 After replace space with dot 123.123.123