国家名称获取ISO2国家代码

53

在Java中,是否有一种简单的方法可以从给定的国家名称获取ISO2代码,例如当给定"瑞士"时获取"CH"?

目前我能想到的唯一解决方案是将所有国家代码和名称保存在一个数组中并遍历它。是否有其他更简单的解决方案?


1
抱歉,两者都没有回答我的问题。我正在寻找一种简单的方法(可能不需要将所有名称+代码保存在数组/映射中),以便从国家名称获取代码,因此是另一种方式。 - Chris
12个回答

0

以下是创建包含英国名称作为键和ISO2代码作为值的排序映射的方法:

static Map<String, String> countriesMap = Arrays.stream( Locale.getISOCountries() ).collect(
            Collectors.toMap( (String code)-> new Locale( "", code ).getDisplayCountry(Locale.ENGLISH),
                    Function.identity(),(o1, o2) -> o1, TreeMap::new ));

你可以将它初始化为静态字段,以避免在每次使用时重新计算。

0
你可以使用JCountry,这是一个包含ISO 3166-1代码及其对应的国家名称翻译到不同语言的开源库。它是debian iso-codes信息的封装。它还包含语言的ISO代码(ISO 639-2)和对应的语言名称翻译。
基本上,你可以获得一个哈希映射<"国家名" 到 "国家信息">,然后进行查找。
你也可以通过使用alpha2或alpha3代码来查找国家信息,实现相反的效果。该库中也有对国家名称的翻译,但默认是英语(之前推荐的地图也是如此)。
如果你想深入了解,请参考该存储库:https://github.com/castmart/jcountry
JCountry jcountry = JCountry.getInstance();
CountryDB countryDB = jcountry.getCountriesDB();
// Get the countries DB hash maps <String, Country>
var dbByAlpha2 = countryDB.getCountriesMapByAlpha2();
var dbByAlpha3 = countryDB.getCountriesMapByAlpha3();
var dbByName = countryDB.getCountriesMapByName();

// Get Translations by language based locale 
Optional<ResourceBundle> bundle = countryDB.getCountriesTranslations(Locale.GERMAN);

// MX -> Mexiko
var translatedCountryName = bundle.get().getString(dbByAlpha2.get("MX").getName());

// Languages DB
LanguageDB languageDB = new LanguageDBImpl(true);
var dbByAlpha2 = languageDB.getLanguagesMapByAlpha2();

// Get Translations by language based locale 
Optional<ResourceBundle> bundle = languageDB.getLanguagesTranslations(Locale.GERMAN);

// Spanisch (Kastilisch)
var translatedCountryName = bundle.get().getString(dbByAlpha2.get("es").getName());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接