我可以知道如何将字符串转义为十进制格式吗?
// currencySymbolPrefix can be any string.
NumberFormat numberFormat = new DecimalFormat(currencySymbolPrefix + "#,##0.00");
如何逃避currencySymbolPrefix
,以便它可能包含任何字符,包括'#',并且不会被解释为其中一种模式。
请不要建议
NumberFormat numberFormat = new DecimalFormat("#,##0.00");
final String output = currencySymbolPrefix + numberFormat.format(number);
因为我的供应商的方法只接受单个NumberFormat。
答案 0 :(得分:10)
您可以使用撇号来引用:
String pattern = "'" + currencySymbolPrefix + "'#,##0.00";
NumberFormat numberFormat = new DecimalFormat(pattern);
如果currencySymbolPrefix
本身可能包含撇号,则需要通过将它们加倍来逃避它们:
String pattern = "'" + currencySymbolPrefix.replace("'", "''") + "'#,##0.00";
答案 1 :(得分:4)
DecimalFormat
允许您引用特殊字符来对其进行字面处理。
模式中的许多字符都是字面意思;它们在解析期间匹配,并在格式化期间输出不变。另一方面,特殊字符代表其他字符,字符串或字符类。除非另有说明,否则必须引用它们,如果它们作为文字出现在前缀或后缀中。
'
可用于引用前缀或后缀中的特殊字符,例如"'#'#"
格式123
到"#123"
。要创建单引号本身,请连续使用两个:"# o''clock"
。
因此,您可以为DecimalFormat
编写通用字符串转义器,如下所示:
// a general-purpose string escaper for DecimalFormat
public static String escapeDecimalFormat(String s) {
return "'" + s.replace("'", "''") + "'";
}
然后你就可以在你的情况下使用它:
String currencySymbolPrefix = "<'#'>";
NumberFormat numberFormat = new DecimalFormat(
escapeDecimalFormat(currencySymbolPrefix) + "#,##0.00"
);
System.out.println(numberFormat.format(123456.789));
// <'#'>123,456.79
DecimalFormat
应该注意的是,对于货币符号,NumberFormat
确实具有方法setCurrency(Currency)
。 DecimalFormat
实现了此方法。如果您使用ISO 4217 currencies之一,则可以在setCurrency
上使用java.util.Currency
实例DecimalFormat
。这也将为您处理符号映射等。
¤ (\u00A4)
是货币符号,替换为货币符号。如果加倍,则用国际货币符号代替。如果存在于模式中,则使用货币小数分隔符而不是小数分隔符。
以下是一个例子:
NumberFormat numberFormat = new DecimalFormat("¤#,##0.00");
numberFormat.setCurrency(Currency.getInstance("USD"));
System.out.println(numberFormat.format(123456.789));
// $123,456.79
答案 2 :(得分:0)
根据documentation,你可以使用unicode。