有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中从欧元货币字符串中删除空格的数字

我有一个方法可以将一个数字转换成一种货币,对于“USD”和“GBP”来说效果很好,但是对于“EUR”这个数字格式,它呈现的是一个字符串,在符号和数字之间有一个空格€ 1.207.987,00,而不是美元和英镑"$1,207,987.00""£1,207,987.00"。我尝试使用“替换”和“全部替换”来删除此项,但没有任何效果,请遵循以下代码:

 public static void main(String[] argsd) {
        Number rawNumber = 120798700;
         NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.forLanguageTag("nl"));
         Currency currency = Currency.getInstance("EUR");
         numberFormat.setCurrency(currency);
         String numberRemoveSpaces = numberFormat.format((rawNumber.floatValue() / 100)).replaceAll("\\s+", "");
        System.out.println(numberRemoveSpaces);
    }

共 (3) 个答案

  1. # 2 楼答案

    您可以使用以下选项,而不是当前的replaceAll()

    replaceFirst("\\u00A0", "")
    

    U+00A0的Unicode值是一个不间断的空格(请参见here)。这是用于将货币符号与金额分开的特定字符

    您还可以选择按如下方式构建自定义格式:

    NumberFormat nf = NumberFormat.getCurrencyInstance();
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setCurrencySymbol("€");
    dfs.setGroupingSeparator('.');
    dfs.setMonetaryDecimalSeparator(',');
    ((DecimalFormat) nf).setDecimalFormatSymbols(dfs);
    System.out.println(nf.format(rawNumber.floatValue() / 100));
    

    这也会产生相同的输出:

    €1.207.987,00
    
  2. # 3 楼答案

    如果要删除它,请尝试以下操作:

    String numberRemoveSpaces = numberFormat.format((rawNumber.floatValue() / 100)).replaceAll("\\p{Z}","");
    

    这将删除任何类型的空白或不可见分隔符