5

「ControlPanel\Clock、Language、andRegion」が「Denmark」であるWindows7マシンを使用しています

スキャナーのドキュメントによると:

スキャナーの初期ロケールは、Locale.getDefault()メソッドによって返される値です。

しかし、私がコードを実行すると:

System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();

「en_US」を出力してから、sc.nextDouble()でjava.util.InputMismatchExceptionをスローします。スキャナーが「1,0」で初期化されている場合に機能します

ただし、ロケールを明示的に設定した場合:

Locale.setDefault(Locale.US);
System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();

「en_US」を出力してから、doubleを適切に解析します。何かが足りないのですか、それともスキャナーのドキュメントが間違っていますか?

編集@Perceptionの提案に従って、最初の例でsc.locale()を確認しました。「da_DK」を出力します。では、Locale.getDefault()メソッドによって返されるのが「en_US」ではないのはなぜですか?

4

1 に答える 1

5

2つの異なるロケールカテゴリがあります。1つは表示用、もう1つはフォーマット用です。スキャナーは使用しますLocale.getDefault(Locale.Category.FORMAT)が、呼び出すLocale.getDefault()と表示用のロケールを取得します。このsetLocale(Locale)メソッドは両方を設定します。

于 2013-03-26T18:44:30.403 に答える