在Java中获取国家列表的最佳方法

28

除了 Locale.getISOCountries() 之外,因为我已经遇到了一些奇怪的错误(相关问题)。还有什么是获取两位字母国家代码和全称的最佳方法?

除了 Locale.getISOCountries() 外,有没有其他更好的方式来获取两个字母的国家代码和完整的国家名称呢?

你能把堆栈跟踪信息贴在这里吗?还有你使用的JDK版本是多少?或者尝试不导入java.util.Locale.getISOCountries(),只为确保你想要的Locale是一致的。 - Adeel Ansari
4个回答

57

查看代码片段:

String[] countryCodes = Locale.getISOCountries();

for (String countryCode : countryCodes) {

    Locale obj = new Locale("", countryCode);

    System.out.println("Country Code = " + obj.getCountry() 
        + ", Country Name = " + obj.getDisplayCountry());

}

查看此Java国家列表以获取更多示例。


从来不知道这个存在。 - Ojonugwa Jude Ochalifu

3

针对一个单独的项目,我从ISO网站获取了国家代码数据。

请注意以下几点:

  • 国家名称全部大写。您可能需要进行微调以使其不是如此。
  • 国家名称并非全都使用简单的ASCII字符。
  • 国家名称并非完全政治中立(任何所谓的国家列表都很难做到)。例如,“中国台湾省”是一个名称。学习有关问题的良好起点是这篇博客文章

ISO的链接现在已经失效。 - Hulk
...而博客文章链接现在触发了巨大的安全警告。 - Hulk
...如果你忽略这些警告,你会得到404错误。 - horvoje
这已经不再是事实了 - “不完全是政治中立的'中国台湾省'。现在只写作'台湾'”。 - izbrannick

1
  1. 从这个页面http://www.theodora.com/country_digraphs.html创建一个地图
  2. 将其保存到文件中(我建议使用XMLEncoder/XMLDecoder类)
  3. 创建一个包装类,从文件中加载该地图(我会使用懒初始化的单例模式),并允许访问get(...)方法。
  4. 对于上述网页上的每一列,重复(或使用双向地图)这些步骤。
  5. 高级时间:添加一些代码,将条目包装在Reference对象中(SoftReference?),以便地图不会引发MemoryErrors。

0
你可以像下面的代码一样使用json:

  1. Json解析..

    String jsonString =JSON_DATA;
    ObjectMapper mapper = new ObjectMapper();    
    try {
            JsonNode rootNode = mapper.readTree(jsonString);              
    
            for (JsonNode node : rootNode) {
                String countrycode = node.path("code").asText();
                String dialnumber = node.path("dial_code").asText();
                String countryname = node.path("name").asText();
    
            }
    
    
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
  2. 这里是Json字符串

    public static String JSON_DATA="
    
     [
       {
        "name": "阿富汗",
        "dial_code": "+93",
        "code": "AF"
       }, 
    
      {
       "name": "奥兰群岛",
      "dial_code": "+358",
      "code": "AX"
      },
    
    
    {
      "name": "阿尔巴尼亚",
     "dial_code": "+355",
     "code": "AL"
     },
    
    {
     "name": "阿尔及利亚",
     "dial_code": "+213",
     "code": "DZ"
     },
    
    {
       "name": "美属萨摩亚",
       "dial_code": "+1684",
       "code": "AS"
      }]";
    
  3. 或者您可以从链接https://gist.github.com/Goles/3196253下载完整的json文件。


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