从android中的国家名称获取国家/地区代码

时间:2015-02-13 15:41:18

标签: android country-codes

我知道有一种方法可以从国家/地区代码中获取国家/地区名称,但另一种方式是否也可能?到目前为止,我找不到将“荷兰”这样的字符串转换为“NL”的函数。如果可能,我如何获得国家/地区代码?

6 个答案:

答案 0 :(得分:7)

public String getCountryCode(String countryName) {

    // Get all country codes in a string array.
    String[] isoCountryCodes = Locale.getISOCountries();
    Map<String, String> countryMap = new HashMap<>();
    Locale locale; 
    String name;

    // Iterate through all country codes:
    for (String code : isoCountryCodes) {
        // Create a locale using each country code
        locale = new Locale("", code);
        // Get country name for each code.
        name = locale.getDisplayCountry();
        // Map all country names and codes in key - value pairs.
        countryMap.put(name, code);
    }

    // Return the country code for the given country name using the map.
    // Here you will need some validation or better yet 
    // a list of countries to give to user to choose from.
    return countryMap.get(countryName); // "NL" for Netherlands.
}

或者Kotlin one liner:

fun getCountryCode(countryName: String) = 
     Locale.getISOCountries().find { Locale("", it).displayCountry == countryName }

正如评论中所指出的,如果您正在使用Java,根据您调用此方法的频率,您可能希望将地图拉出来,但最好还是查看@Dambo的优化版本,而不是地图。

答案 1 :(得分:1)

我改进了 Vlad 的答案。因为每次访问该方法时初始化HashMap都是非常糟糕的做法。除非您初始化地图一次。编辑的答案:

public String getCountryCode(String countryName) {
    String[] isoCountryCodes = Locale.getISOCountries();
    for (String code : isoCountryCodes) {
        Locale locale = new Locale("", code);
        if (countryName.equalsIgnoreCase(locale.getDisplayCountry())) {
           return code;
        }
    }
    return "";
}

答案 2 :(得分:0)

Locale

Locale locale = new Locale("de");
locale.getCountry();

答案 3 :(得分:0)

效率不高,但你可以试试这个:

for (Locale locale : Locale.getAvailableLocales()) {
    if (locale.getDisplayCountry(Locale.US).equals("Netherlands")) {
        // Found !
    }
}

现在,有一些警告:

  • 是您用英语拼写的输入字符串(如果没有,您知道该语言吗?)?
  • 是您正在寻找支持的语言环境的一部分的国家/地区(如果不是,这将无效)?

答案 4 :(得分:0)

我尝试了这段代码,它对我有用。

public String GetCountryZipCode() {
    String CountryID = "";
    String CountryZipCode = "";

    TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    //getNetworkCountryIso
    CountryID = manager.getSimCountryIso().toUpperCase();
    Log.v(Constant.TAG, "CountryID" + CountryID);
    String[] rl = this.getResources().getStringArray(R.array.CountryCodes);
    for (int i = 0; i < rl.length; i++) {
        String[] g = rl[i].split(",");
        if (g[1].trim().equals(CountryID.trim())) {
            CountryZipCode = g[0];
            break;
        }
    }
    return CountryZipCode;
}

并且对于CountryCodes,您必须将以下字符串放在字符串xml

<string-array name="CountryCodes" >
    <item>93,AF</item>
    <item>355,AL</item>
    <item>213,DZ</item>
    <item>376,AD</item>
    <item>244,AO</item>
    <item>672,AQ</item>
    <item>54,AR</item>
    <item>374,AM</item>
    <item>297,AW</item>
    <item>61,AU</item>
    <item>43,AT</item>
    <item>994,AZ</item>
    <item>973,BH</item>
    <item>880,BD</item>
    <item>375,BY</item>
    <item>32,BE</item>
    <item>501,BZ</item>
    <item>229,BJ</item>
    <item>975,BT</item>
    <item>591,BO</item>
    <item>387,BA</item>
    <item>267,BW</item>
    <item>55,BR</item>
    <item>673,BN</item>
    <item>359,BG</item>
    <item>226,BF</item>
    <item>95,MM</item>
    <item>257,BI</item>
    <item>855,KH</item>
    <item>237,CM</item>
    <item>1,CA</item>
    <item>238,CV</item>
    <item>236,CF</item>
    <item>235,TD</item>
    <item>56,CL</item>
    <item>86,CN</item>
    <item>61,CX</item>
    <item>61,CC</item>
    <item>57,CO</item>
    <item>269,KM</item>
    <item>242,CG</item>
    <item>243,CD</item>
    <item>682,CK</item>
    <item>506,CR</item>
    <item>385,HR</item>
    <item>53,CU</item>
    <item>357,CY</item>
    <item>420,CZ</item>
    <item>45,DK</item>
    <item>253,DJ</item>
    <item>670,TL</item>
    <item>593,EC</item>
    <item>20,EG</item>
    <item>503,SV</item>
    <item>240,GQ</item>
    <item>291,ER</item>
    <item>372,EE</item>
    <item>251,ET</item>
    <item>500,FK</item>
    <item>298,FO</item>
    <item>679,FJ</item>
    <item>358,FI</item>
    <item>33,FR</item>
    <item>689,PF</item>
    <item>241,GA</item>
    <item>220,GM</item>
    <item>995,GE</item>
    <item>49,DE</item>
    <item>233,GH</item>
    <item>350,GI</item>
    <item>30,GR</item>
    <item>299,GL</item>
    <item>502,GT</item>
    <item>224,GN</item>
    <item>245,GW</item>
    <item>592,GY</item>
    <item>509,HT</item>
    <item>504,HN</item>
    <item>852,HK</item>
    <item>36,HU</item>
    <item>91,IN</item>
    <item>62,ID</item>
    <item>98,IR</item>
    <item>964,IQ</item>
    <item>353,IE</item>
    <item>44,IM</item>
    <item>972,IL</item>
    <item>39,IT</item>
    <item>225,CI</item>
    <item>81,JP</item>
    <item>962,JO</item>
    <item>7,KZ</item>
    <item>254,KE</item>
    <item>686,KI</item>
    <item>965,KW</item>
    <item>996,KG</item>
    <item>856,LA</item>
    <item>371,LV</item>
    <item>961,LB</item>
    <item>266,LS</item>
    <item>231,LR</item>
    <item>218,LY</item>
    <item>423,LI</item>
    <item>370,LT</item>
    <item>352,LU</item>
    <item>853,MO</item>
    <item>389,MK</item>
    <item>261,MG</item>
    <item>265,MW</item>
    <item>60,MY</item>
    <item>960,MV</item>
    <item>223,ML</item>
    <item>356,MT</item>
    <item>692,MH</item>
    <item>222,MR</item>
    <item>230,MU</item>
    <item>262,YT</item>
    <item>52,MX</item>
    <item>691,FM</item>
    <item>373,MD</item>
    <item>377,MC</item>
    <item>976,MN</item>
    <item>382,ME</item>
    <item>212,MA</item>
    <item>258,MZ</item>
    <item>264,NA</item>
    <item>674,NR</item>
    <item>977,NP</item>
    <item>31,NL</item>
    <item>599,AN</item>
    <item>687,NC</item>
    <item>64,NZ</item>
    <item>505,NI</item>
    <item>227,NE</item>
    <item>234,NG</item>
    <item>683,NU</item>
    <item>850,KP</item>
    <item>47,NO</item>
    <item>968,OM</item>
    <item>92,PK</item>
    <item>680,PW</item>
    <item>507,PA</item>
    <item>675,PG</item>
    <item>595,PY</item>
    <item>51,PE</item>
    <item>63,PH</item>
    <item>870,PN</item>
    <item>48,PL</item>
    <item>351,PT</item>
    <item>1,PR</item>
    <item>974,QA</item>
    <item>40,RO</item>
    <item>7,RU</item>
    <item>250,RW</item>
    <item>590,BL</item>
    <item>685,WS</item>
    <item>378,SM</item>
    <item>239,ST</item>
    <item>966,SA</item>
    <item>221,SN</item>
    <item>381,RS</item>
    <item>248,SC</item>
    <item>232,SL</item>
    <item>65,SG</item>
    <item>421,SK</item>
    <item>386,SI</item>
    <item>677,SB</item>
    <item>252,SO</item>
    <item>27,ZA</item>
    <item>82,KR</item>
    <item>34,ES</item>
    <item>94,LK</item>
    <item>290,SH</item>
    <item>508,PM</item>
    <item>249,SD</item>
    <item>597,SR</item>
    <item>268,SZ</item>
    <item>46,SE</item>
    <item>41,CH</item>
    <item>963,SY</item>
    <item>886,TW</item>
    <item>992,TJ</item>
    <item>255,TZ</item>
    <item>66,TH</item>
    <item>228,TG</item>
    <item>690,TK</item>
    <item>676,TO</item>
    <item>216,TN</item>
    <item>90,TR</item>
    <item>993,TM</item>
    <item>688,TV</item>
    <item>971,AE</item>
    <item>256,UG</item>
    <item>44,GB</item>
    <item>380,UA</item>
    <item>598,UY</item>
    <item>1,US</item>
    <item>998,UZ</item>
    <item>678,VU</item>
    <item>39,VA</item>
    <item>58,VE</item>
    <item>84,VN</item>
    <item>681,WF</item>
    <item>967,YE</item>
    <item>260,ZM</item>
    <item>263,ZW</item>
</string-array>

答案 5 :(得分:-1)

使用国家/地区代码创建一个国家名称和值的jsonObject。 e.g。

JSONObject json=new JSONObject(); json.putString('COuntry Name','Country COde');

并将其保存在prefrences中

并获得相同的用途 json.getString('Country Name')