如何将ISO alpha-3国家代码转换为ISO alpha-2格式
ISO 3166 alpha-3转alpha-2代码实现方案
核心实现逻辑
Java标准库的Locale类未直接提供alpha-3到alpha-2的查询接口,你可以通过遍历所有标准国家代码预构建映射缓存的方式实现,无需引入第三方依赖。
完整代码示例
JDK 9+版本
import java.util.HashMap; import java.util.Locale; import java.util.Map; public class CountryCodeConverter { // alpha-3转alpha-2的全局缓存映射 private static final Map<String, String> ALPHA3_TO_ALPHA2_CACHE = new HashMap<>(); // 类加载时预构建映射 static { for (String alpha2 : Locale.getISOCountries(Locale.IsoCountryCode.PART1_ALPHA2)) { Locale tempLocale = new Locale.Builder().setRegion(alpha2).build(); String alpha3 = tempLocale.getISO3Country(); ALPHA3_TO_ALPHA2_CACHE.put(alpha3, alpha2); } } /** * 将ISO 3166 alpha-3国家代码转换为alpha-2代码 * @param alpha3 3位国家代码,大小写不敏感 * @return 对应的2位国家代码,无匹配时返回null */ public static String convertAlpha3ToAlpha2(String alpha3) { if (alpha3 == null || alpha3.length() != 3) { throw new IllegalArgumentException("输入必须是3位的ISO alpha-3国家代码"); } return ALPHA3_TO_ALPHA2_CACHE.get(alpha3.toUpperCase()); } }
JDK 8兼容版本
JDK 8及更低版本没有Locale.IsoCountryCode枚举,替换静态块逻辑即可:
static { for (String alpha2 : Locale.getISOCountries()) { Locale tempLocale = new Locale("", alpha2); String alpha3 = tempLocale.getISO3Country(); ALPHA3_TO_ALPHA2_CACHE.put(alpha3, alpha2); } }
使用示例
- 输入
convertAlpha3ToAlpha2("DEU")返回DE - 输入
convertAlpha3ToAlpha2("FRA")返回FR - 输入
convertAlpha3ToAlpha2("PRY")返回PY
注意事项
映射基于ISO 3166官方标准构建,若输入非标准alpha-3代码会返回null,可根据业务需求自定义异常抛出逻辑或者缺省返回值。
映射在类加载时仅初始化一次,查询时间复杂度为O(1),性能满足绝大多数业务场景。
内容的提问来源于stack exchange,提问作者Bruno Martins
相关产品推荐
相关产品推荐

