我可以知道如何将字符串转义为十进制格式吗?
// 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)
将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实例来setCurrency上DecimalFormat。这也将为您处理符号映射等。
¤ (\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)