Java 8获取巴西葡萄牙语Locale时十进制分隔符异常求助
问题分析与解决方案
首先,你遇到的问题核心是Locale对象的创建方式不正确,导致Java没有正确识别巴西葡萄牙语的区域设置,回退到了默认Locale(通常是英语系,所以十进制分隔符是.)。
问题根源
你使用了new Locale(System.getProperty("user.country.format"))这个构造方法,但Java的Locale(String)单参数构造函数接收的是语言代码(比如"pt"代表葡萄牙语),而非国家代码(比如"BR")。如果你的user.country.format属性值是"BR",这个Locale是无效的,Java会自动使用默认区域设置,自然得不到巴西的十进制分隔符,。
正确的解决方法
你需要正确构造巴西葡萄牙语的Locale对象,下面是几种可靠的实现方式:
1. 直接使用预定义的Locale常量
Java已经内置了巴西的Locale常量,直接调用最省心:
public static void main(String[] args) { final Locale locale = Locale.BRAZIL; DecimalFormatSymbols decSymbols = new DecimalFormatSymbols(locale); System.out.println("Decimal Symbol: " + decSymbols.getDecimalSeparator()); }
2. 明确指定语言和国家代码
使用双参数的Locale构造方法,语言代码传"pt",国家代码传"BR":
public static void main(String[] args) { // 若要从系统属性获取,确保属性值包含完整的语言+国家组合,比如"pt_BR" String localeConfig = System.getProperty("user.country.format"); Locale locale; if (localeConfig != null && localeConfig.contains("_")) { String[] parts = localeConfig.split("_"); locale = new Locale(parts[0], parts[1]); } else { // 配置无效时,兜底使用巴西Locale locale = new Locale("pt", "BR"); } DecimalFormatSymbols decSymbols = new DecimalFormatSymbols(locale); System.out.println("Decimal Symbol: " + decSymbols.getDecimalSeparator()); }
3. 使用语言标签构造
支持标准的pt-BR格式的语言标签:
public static void main(String[] args) { final Locale locale = Locale.forLanguageTag("pt-BR"); DecimalFormatSymbols decSymbols = new DecimalFormatSymbols(locale); System.out.println("Decimal Symbol: " + decSymbols.getDecimalSeparator()); }
验证结果
使用上面任意一种方式运行代码,都会输出Decimal Symbol: ,,符合巴西葡萄牙语的区域设置规范。
内容的提问来源于stack exchange,提问作者ashish sharma
相关产品推荐
相关产品推荐

