以下代码的输出
Locale.setDefault(new Locale("fr"));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println("End");是
Start
End而此代码的输出
//Locale.setDefault(new Locale("fr"));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println("End");是
Start
US
End我很好奇为什么第一个代码块的输出将默认的语言设置更改为法语,结果会产生一个空字符串作为Locale.getDefault().getCountry()的输出。
发布于 2021-02-10 23:28:46
根据文件:
A
java.util.Locale是一个轻量级对象,只包含几个重要成员:
使用构造函数创建类Locale的实例时,可以使用法语创建区域设置,而不指定国家或变体。
接下来,将所创建的区域设置传递给setDefault方法。因此,从那时起,您就有了使用法语的默认区域设置,并且没有任何国家或变体。
Locale.setDefault不允许您只设置默认语言。您总是设置整个Locale对象。
要解决问题,您可以首先从默认地区获取国家代码,然后使用法语和默认国家创建地区:
String defaultCountryCode = Locale.getDefault().getCountry();
Locale.setDefault(new Locale("fr", defaultCountryCode));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println("End");你会得到
Start
US
End发布于 2021-02-10 22:29:27
使用国家代码,例如new Locale("fr", "FR")。这一点很重要,因为同一种语言可以在多个国家使用,例如法语在许多国家使用。
import java.util.Locale;
class Main {
public static void main(String[] args) {
Locale.setDefault(new Locale("fr", "FR"));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println(Locale.getDefault().getDisplayCountry());
System.out.println("End");
}
}输出:
Start
FR
France
End查看本教程,了解更多有关它的信息。
第二个代码段输出国家名称,因为它从默认系统设置中获取此信息。
https://stackoverflow.com/questions/66145970
复制相似问题