Java8 --- > Java17 迁移期间的货币转换问题



`

public class TestCurrency {
public static void main(String []args) {
int decimalPrecision=0;
String currencySymbol="إ.د";
String dfSymbolReplacePattern = "د.إ.u200F";
Locale locale = new Locale.Builder().setLanguage("ar").setRegion("AE").build();
final NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
final DecimalFormat df = (DecimalFormat) nf;
df.setMinimumFractionDigits(decimalPrecision);
df.setMaximumFractionDigits(decimalPrecision);
df.setRoundingMode(RoundingMode.HALF_UP);
final String positivePrefix = df.getPositiveSuffix().replace(dfSymbolReplacePattern, currencySymbol);
final String positiveSuffix = df.getPositivePrefix().replace(dfSymbolReplacePattern, currencySymbol);
final String negativePrefix = df.getNegativeSuffix().replace(dfSymbolReplacePattern, currencySymbol);
final String negativeSuffix = df.getNegativePrefix().replace(dfSymbolReplacePattern, currencySymbol);
df.setPositivePrefix(positivePrefix);
df.setNegativePrefix(negativePrefix);
df.setPositiveSuffix(positiveSuffix);
df.setNegativeSuffix(negativeSuffix);
System.out.println("Arabic Amount is: "+df.format(10.0));
}
}

`

Java 8:阿拉伯语金额为:10إJava 17:阿拉伯语金额为:

想要在Java17 上运行时保持Java8的格式

我不知道Java 11和Java 17在本地化和国际化方面到底发生了什么变化,但经过一些简短的实验,我找到了一个简单的解决方法。遵循以下步骤:

  1. 将区域设置语言更改为英语("en"(并保留阿拉伯联合酋长国地区("AE"(:
    Locale locale = new.Locale.Builder().setLanguage("en").setRegion("AE").build();
    
    结果如下:Arabic Amount is: 10AED
  2. dfSymbolReplacePattern定义的替换从"د.إ.u200F"更改为"AED"
    String dfSymbolReplacePattern = "AED";
    
    现在"AED"货币符号将被替换:Arabic Amount is: 10إ.د

最新更新