Java Gold 例題集 ローカライズとフォーマット

次の問題の出力結果を答えてください


# 問題 Locale設定

```java
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("ja", "JP");
        System.out.println(locale.getDisplayCountry(Locale.US));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
Japan
</pre>
このコードは、`Locale`オブジェクトを使用して日本の国名を英語で表示します。`Locale.US`を指定することで、表示が英語になります。
</details>




# 問題 数値のフォーマット

```java
import java.text.NumberFormat;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("en", "US");
        NumberFormat formatter = NumberFormat.getCurrencyInstance(locale);
        System.out.println(formatter.format(1000.50));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
$1,000.50
</pre>
このコードは、USのロケールを使用して通貨の形式で数値を表示します。
</details>



# 問題 デフォルトロケール
デフォルトロケール: JAPAN
```java
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale defaultLocale = Locale.getDefault();
        System.out.println(defaultLocale.getLanguage());
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
ja
</pre>
このコードは、デフォルトロケールの言語コードを表示します。結果は「ja」となります（システムのデフォルトロケールがjaの場合）。
</details>



# 問題 日付のフォーマット
日時が2024/08/22の場合
```java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("ja", "JP");
        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, locale);
        System.out.println(dateFormat.format(new Date()));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
2024年8月22日
</pre>
このコードは、日本のロケールを使用して現在の日付をLONG形式で表示します。
</details>



# 問題 サポートされていないロケール

```java
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.MissingResourceException;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("pt", "BR");
        try {
            ResourceBundle bundle = ResourceBundle.getBundle("MessagesBundle", locale);
            System.out.println(bundle.getString("greeting"));
        } catch (MissingResourceException e) {
            System.out.println("Resource not found!");
        }
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
Resource not found!
</pre>
このコードは、サポートされていないロケールを使用した場合の例外処理を示します。
</details>



# 問題 数値フォーマットのデフォルトロケール
デフォルトロケールがJAPANの場合
```java
import java.text.NumberFormat;

public class Main {
    public static void main(String[] args) {
        NumberFormat formatter = NumberFormat.getCurrencyInstance();
        System.out.println(formatter.format(123456.789));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">￥123,457
</pre>
デフォルトロケールを使用して数値を通貨形式で表示します(デフォルトロケールがJAPANの場合)。

:::note alert
Locale.setDefault("ja");とした場合、地域のロケール情報が含まれないため、国際通貨記号が表示されます。
:::

<pre class="console">¤123,456.79
</pre>
</details>



# 問題 ListResourceBundleの使用

```java
import java.util.ListResourceBundle;

public class MyResourceBundle extends ListResourceBundle {
    @Override
    protected Object[][] getContents() {
        return new Object[][]{
            {"greeting", "Hola, Mundo!"}
        };
    }
}

public class Main {
    public static void main(String[] args) {
        MyResourceBundle bundle = new MyResourceBundle();
        System.out.println(bundle.getString("greeting"));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
Hola, Mundo!
</pre>
このコードは、`ListResourceBundle`を使用してカスタムリソースバンドルを作成し、メッセージを表示します。
</details>



# 問題 ロケールの言語コード

```java
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = Locale.forLanguageTag("en-GB");
        System.out.println(locale.getLanguage());
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
en
</pre>
このコードは、言語タグを使用してロケールを作成し、その言語コードを表示します。
</details>




# 問題 ロケールによる数値のフォーマット

```java
import java.text.NumberFormat;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("ja", "JP");
        NumberFormat formatter = NumberFormat.getNumberInstance(locale);
        System.out.println(formatter.format(123456.789));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
123,456.789
</pre>
このコードは、日本のロケールを使用して数値を標準形式で表示します。
</details>





# 問題 ロケールタグを使用したフォーマット
デフォルトロケールが日本の場合
```java
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = Locale.forLanguageTag("zh-CN");
        System.out.println(locale.getDisplayLanguage());
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
中国語
</pre>
このコードは、ロケールタグを使用してロケールを作成し、デフォルトロケールがJAPANの場合、その表示言語を日本語で表示します。
</details>






# 問題 ロケールによるパーセンテージ表示

```java
import java.text.NumberFormat;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("fr", "FR");
        NumberFormat formatter = NumberFormat.getPercentInstance(locale);
        System.out.println(formatter.format(0.75));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
75 %
</pre>
このコードは、フランスのロケールを使用してパーセンテージを表示します。
</details>





# 問題 日付のロケール依存フォーマット

```java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("de", "DE");
        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
        System.out.println(dateFormat.format(new Date()));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
22.08.2024
</pre>
このコードは、ドイツのロケールを使用して現在の日付をMEDIUM形式で表示します。
</details>



# 問題 リソースバンドルの例外処理

```java
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.MissingResourceException;

public class Main {
    public static void main(String[] args) {
        try {
            ResourceBundle bundle = ResourceBundle.getBundle("MessagesBundle", new Locale("ru", "RU"));
            System.out.println(bundle.getString("nonexistent"));
        } catch (MissingResourceException e) {
            System.out.println("Resource not found");
        }
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
Resource not found
</pre>
このコードは、存在しないリソースを取得しようとした場合の例外処理を示しています。
</details>



# 問題 ロケールと時刻フォーマット

```java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("es", "ES");
        DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, locale);
        System.out.println(timeFormat.format(new Date()));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
22:30
</pre>
このコードは、スペインのロケールを使用して現在の時刻をSHORT形式で表示します（例として22:30）。
</details>



# 問題 通貨のロケール依存フォーマット

```java
import java.text.NumberFormat;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("zh", "CN");
        NumberFormat formatter = NumberFormat.getCurrencyInstance(locale);
        System.out.println(formatter.format(1000000));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
¥1,000,000.00
</pre>
このコードは、中国のロケールを使用して通貨をフォーマットし表示します。
</details>


# 問題 メッセージフォーマットの使用

```java
import java.text.MessageFormat;

public class Main {
    public static void main(String[] args) {
        String pattern = "The price of {0} is {1,number,currency}.";
        String message = MessageFormat.format(pattern, "Apple", 123);
        System.out.println(message);
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
The price of Apple is ￥123.
</pre>
このコードは、MessageFormatを使用してメッセージをフォーマットし表示します。
</details>




# 問題 曜日のロケール依存表示

```java
import java.text.DateFormatSymbols;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        try {
			Locale locale = new Locale("ja", "US");
	        String[] weekdays = new DateFormatSymbols(locale).getWeekdays();
	        System.out.println(weekdays[1]);
	
		} catch (Exception e) {
			System.out.println(e.getClass());
		}
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">日曜日
</pre>
このコードは、言語jaで日曜日の名前を表示します。
1~7の整数で曜日を表します。<br>
0の場合: 何も表示されない<br>
8の場合: class java.lang.ArrayIndexOutOfBoundsExceptionが表示される
</details>



# 問題 カスタムフォーマットパターン

```java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale locale = new Locale("ja", "JP");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm", locale);
        System.out.println(sdf.format(new Date()));
    }
}
```

<details>
<summary>解答</summary>
<pre class="console">
2024/08/22 22:30
</pre>
このコードは、日本のロケールを使用してカスタムパターンで日付をフォーマットし表示します。
</details>




https://qiita.com/T-ngtj/private/df254aacd05be698199a