You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:36:02