如何转义要传递给DecimalFormat的字符串

Che*_*eng 11 java

我可以知道如何将字符串转义为十进制格式吗?

// currencySymbolPrefix can be any string.
NumberFormat numberFormat = new DecimalFormat(currencySymbolPrefix + "#,##0.00");
Run Code Online (Sandbox Code Playgroud)

我如何逃脱currencySymbolPrefix,以便它可能包含任何字符,包括'#',并且不会被解释为模式之一.

请不要建议

NumberFormat numberFormat = new DecimalFormat("#,##0.00");
final String output = currencySymbolPrefix + numberFormat.format(number);
Run Code Online (Sandbox Code Playgroud)

因为我的供应商的方法只接受单个NumberFormat.

Jon*_*eet 11

您可以使用撇号来引用:

String pattern = "'" + currencySymbolPrefix + "'#,##0.00";
NumberFormat numberFormat = new DecimalFormat(pattern);
Run Code Online (Sandbox Code Playgroud)

如果currencySymbolPrefix它本身可能包含撇号,你需要通过将它们加倍来逃避它们:

String pattern = "'" + currencySymbolPrefix.replace("'", "''") + "'#,##0.00";
Run Code Online (Sandbox Code Playgroud)


pol*_*nts 5

引用特殊字符按字面意义对待它们

DecimalFormat允许你引用特殊字符字面对待他们。

模式中的许多字符都是按字面意义使用的;它们在解析过程中匹配,并且在格式化过程中保持不变。另一方面,特殊字符代表其他字符,字符串或字符类别。除非另有说明,否则必须用引号引起来,否则它们将作为文字出现在前缀或后缀中。

'可用于在前缀或后缀中引用特殊字符,例如,"'#'#"格式123"#123"。要自己创建一个单引号,请连续使用两个:"# o''clock"

因此,您可以这样编写通用字符串转义符DecimalFormat

// a general-purpose string escaper for DecimalFormat

public static String escapeDecimalFormat(String s) {
    return "'" + s.replace("'", "''") + "'";
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在这种情况下使用它,如下所示:

    String currencySymbolPrefix = "<'#'>";
    NumberFormat numberFormat = new DecimalFormat(
        escapeDecimalFormat(currencySymbolPrefix) + "#,##0.00"
    );  
    System.out.println(numberFormat.format(123456.789));
    // <'#'>123,456.79
Run Code Online (Sandbox Code Playgroud)

关于在插入货币符号 DecimalFormat

应该注意的是,对于货币符号,NumberFormat实际上确实具有方法setCurrency(Currency)DecimalFormat实现此方法。如果你正在使用的一个ISO 4217升的货币,你可以用一个java.util.Currency实例来setCurrencyDecimalFormat。这也将为您处理符号映射等。

¤ (\u00A4)是货币符号,由货币符号代替。如果加倍,则替换为国际货币符号。如果存在于模式中,则使用货币十进制分隔符代替十进制分隔符。

这是一个例子:

    NumberFormat numberFormat = new DecimalFormat("¤#,##0.00");
    numberFormat.setCurrency(Currency.getInstance("USD"));
    System.out.println(numberFormat.format(123456.789));
    // $123,456.79
Run Code Online (Sandbox Code Playgroud)