【问题标题】:Java FRANCE/FRENCH Locale thousands separator looks like space but not actuallyJava FRANCE/FRENCH 语言环境千位分隔符看起来像空格,但实际上不是
【发布时间】:2016-02-03 09:18:41
【问题描述】:

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

输出

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

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

【问题讨论】:

  • 为什么不设置一个使用点的数字格式化程序?
  • @mlk 我的代码接收到 FRANCE 格式的字符串。我想转换它。所以这段代码只是显示整个流程。
  • 我很想将其转换为数字(因为这是您正在使用的),然后将其转换回您想要的格式的字符串,而不是进行字符串操作。当对象更有意义时,感觉太接近使用字符串的反模式了。

标签: java locale number-formatting


【解决方案1】:

它是\u00a0 不间断的空间,这对于数量是有意义的。 (想象一下 40 欧元在一行的末尾,下一行从 000 开始。) 其他一些语言也是如此。

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

【讨论】:

    【解决方案2】:

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

    按预期工作

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

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 2023-04-09
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多