Ответ 1
Это работает -
Locale locale = new Locale("en","IN");
System.out.println("Country=" + locale.getISO3Country());
Вывод:
Country=IND
Использование Java. Есть ли быстрый способ преобразования кода страны альфа-2 (IN или GB) к эквиваленту альфа-3 (IND или GBR)?
Я могу получить коды альфа-2 с помощью
String [] codes = java.util.Locale.getISOLanguages ();
Это не проблема, на самом деле мое приложение читает в коде альфа-2, но мне нужно вывести эквивалент альфа-3.
Есть ли аналогичный способ, как указано выше, для получения альфа-3-кодов?
Любые предложения?
Это работает -
Locale locale = new Locale("en","IN");
System.out.println("Country=" + locale.getISO3Country());
Вывод:
Country=IND
Да, просто создайте локаль и получите, если из локали:
String alpha3Country = new Locale("en", alpha2County).getISO3Country();
BTW: getISOLanguages()
возвращает коды языков (в нижнем регистре), getISOCountries()
возвращает коды страны (в верхнем регистре)
Поскольку вы читаете коды, вы не можете их жестко скопировать, вам нужно создать таблицу поиска для преобразования в ISO-коды.
public static void main(String[] args) {
// setup
Locale[] availableLocales = Locale.getAvailableLocales();
HashMap<String, String> map = new HashMap<String, String>();
for ( Locale l : availableLocales ) {
map.put( l.getCountry(), l.getISO3Country() );
}
// usage
System.out.println( map.get( "IN" ) );
System.out.println( map.get( "GB" ) );
}
Ответ на гопи. НО обратите внимание, что возвращенные коды являются кодами стран ISO 3166, а не кодами ISO 4217. Они немного отличаются, поэтому используйте с осторожностью
public static String convertAlpha3ToAlpha2(String alpha3) {
return Arrays.stream(Locale.getISOCountries())
.filter(alpha2 -> isCountriesEqual(alpha3, alpha2))
.findFirst().orElseThrow();
}
private static boolean isCountriesEqual(String alpha3, String alpha2) {
return alpha3.equalsIgnoreCase(new Locale("", alpha2).getISO3Country());
}