Код страны ISO2 из названия страны

Есть ли в Java простой способ получить код ISO2 из заданного названия страны, например «CH», если указано «Швейцария»?

Единственное решение, которое я могу придумать на данный момент, - это сохранить все коды и имена стран в массиве и перебрать его. Любые другие (более простые) решения?


person Chris    schedule 04.01.2013    source источник
comment
Извините, оба не отвечают на мой вопрос. Я искал ПРОСТОЙ способ (возможно, без сохранения всех имен + кодов в массиве/карте), чтобы получить код из названия страны, поэтому наоборот.   -  person Chris    schedule 04.01.2013


Ответы (10)


Вы можете использовать встроенный класс Locale:

Locale l = new Locale("", "CH");
System.out.println(l.getDisplayCountry());

печатает "Швейцария" например. Обратите внимание, что я не указал язык.

Итак, что вы можете сделать для обратного поиска, так это построить карту из доступных стран:

public static void main(String[] args) throws InterruptedException {
    Map<String, String> countries = new HashMap<>();
    for (String iso : Locale.getISOCountries()) {
        Locale l = new Locale("", iso);
        countries.put(l.getDisplayCountry(), iso);
    }

    System.out.println(countries.get("Switzerland"));
    System.out.println(countries.get("Andorra"));
    System.out.println(countries.get("Japan"));
}
person assylias    schedule 04.01.2013
comment
Обратите внимание, что это БУДЕТ прервано, если на вашем телефоне установлен язык, отличный от английского. Locale.getDisplayLocale() эквивалентно Locale.getDisplayLocale(Locale.getDefaultLocale()); Если вы хотите преобразовать названия стран на определенном языке в ISO (или наоборот), вам нужно сделать что-то вроде localizedCountries.put(new Locale("en", iso).getDisplayCountry(new Locale("en", iso)), new Locale(Locale.getDefault().getLanguage(), iso).getDisplayCountry());, где вы замените en двухбуквенным кодом любого языка. - person Fab Castel; 22.07.2015
comment
Обратите внимание, что код, который я разместил выше, создает карту из названий стран на английском языке в названия стран на любом языке, на который настроен телефон. Это то, что я намеревался сделать изначально и что привело меня сюда, но вы можете легко адаптировать мое решение для решения исходной проблемы. - person Fab Castel; 22.07.2015

Как уже упоминалось, карта - это самый простой способ, вот что я написал/использовал, когда у меня была такая же проблема.

 import java.util.Map;
 import java.util.TreeMap;


 public class CountryCodes {
     final Map<String, String> map = new TreeMap<String, String>   (String.CASE_INSENSITIVE_ORDER);
    public CountryCodes() {

     map.put("Andorra, Principality Of", "AD");
     map.put("United Arab Emirates", "AE");
     map.put("Afghanistan, Islamic State Of", "AF");
     map.put("Antigua And Barbuda", "AG");
     map.put("Anguilla", "AI");
     map.put("Albania", "AL");
     map.put("Armenia", "AM");
     map.put("Netherlands Antilles", "AN");
     map.put("Angola", "AO");
     map.put("Antarctica", "AQ");
     map.put("Argentina", "AR");
     map.put("American Samoa", "AS");
     map.put("Austria", "AT");
     map.put("Australia", "AU");
     map.put("Aruba", "AW");
     map.put("Azerbaidjan", "AZ");
     map.put("Bosnia-Herzegovina", "BA");
     map.put("Barbados", "BB");
     map.put("Bangladesh", "BD");
     map.put("Belgium", "BE");
     map.put("Burkina Faso", "BF");
     map.put("Bulgaria", "BG");
     map.put("Bahrain", "BH");
     map.put("Burundi", "BI");
     map.put("Benin", "BJ");
     map.put("Bermuda", "BM");
     map.put("Brunei Darussalam", "BN");
     map.put("Bolivia", "BO");
     map.put("Brazil", "BR");
     map.put("Bahamas", "BS");
     map.put("Bhutan", "BT");
     map.put("Bouvet Island", "BV");
     map.put("Botswana", "BW");
     map.put("Belarus", "BY");
     map.put("Belize", "BZ");
     map.put("Canada", "CA");
     map.put("Cocos (Keeling) Islands", "CC");
     map.put("Central African Republic", "CF");
     map.put("Congo, The Democratic Republic Of The", "CD");
     map.put("Congo", "CG");
     map.put("Switzerland", "CH");
     map.put("Ivory Coast (Cote D'Ivoire)", "CI");
     map.put("Cook Islands", "CK");
     map.put("Chile", "CL");
     map.put("Cameroon", "CM");
     map.put("China", "CN");
     map.put("Colombia", "CO");
     map.put("Costa Rica", "CR");
     map.put("Former Czechoslovakia", "CS");
     map.put("Cuba", "CU");
     map.put("Cape Verde", "CV");
     map.put("Christmas Island", "CX");
     map.put("Cyprus", "CY");
     map.put("Czech Republic", "CZ");
     map.put("Germany", "DE");
     map.put("Djibouti", "DJ");
     map.put("Denmark", "DK");
     map.put("Dominica", "DM");
     map.put("Dominican Republic", "DO");
     map.put("Algeria", "DZ");
     map.put("Ecuador", "EC");
     map.put("Estonia", "EE");
     map.put("Egypt", "EG");
     map.put("Western Sahara", "EH");
     map.put("Eritrea", "ER");
     map.put("Spain", "ES");
     map.put("Ethiopia", "ET");
     map.put("Finland", "FI");
     map.put("Fiji", "FJ");
     map.put("Falkland Islands", "FK");
     map.put("Micronesia", "FM");
     map.put("Faroe Islands", "FO");
     map.put("France", "FR");
     map.put("France (European Territory)", "FX");
     map.put("Gabon", "GA");
     map.put("Great Britain", "UK");
     map.put("Grenada", "GD");
     map.put("Georgia", "GE");
     map.put("French Guyana", "GF");
     map.put("Ghana", "GH");
     map.put("Gibraltar", "GI");
     map.put("Greenland", "GL");
     map.put("Gambia", "GM");
     map.put("Guinea", "GN");
     map.put("Guadeloupe (French)", "GP");
     map.put("Equatorial Guinea", "GQ");
     map.put("Greece", "GR");
     map.put("S. Georgia & S. Sandwich Isls.", "GS");
     map.put("Guatemala", "GT");
     map.put("Guam (USA)", "GU");
     map.put("Guinea Bissau", "GW");
     map.put("Guyana", "GY");
     map.put("Hong Kong", "HK");
     map.put("Heard And McDonald Islands", "HM");
     map.put("Honduras", "HN");
     map.put("Croatia", "HR");
     map.put("Haiti", "HT");
     map.put("Hungary", "HU");
     map.put("Indonesia", "ID");
     map.put("Ireland", "IE");
     map.put("Israel", "IL");
     map.put("India", "IN");
     map.put("British Indian Ocean Territory", "IO");
     map.put("Iraq", "IQ");
     map.put("Iran", "IR");
     map.put("Iceland", "IS");
     map.put("Italy", "IT");
     map.put("Jamaica", "JM");
     map.put("Jordan", "JO");
     map.put("Japan", "JP");
     map.put("Kenya", "KE");
     map.put("Kyrgyz Republic (Kyrgyzstan)", "KG");
     map.put("Cambodia, Kingdom Of", "KH");
     map.put("Kiribati", "KI");
     map.put("Comoros", "KM");
     map.put("Saint Kitts & Nevis Anguilla", "KN");
     map.put("North Korea", "KP");
     map.put("South Korea", "KR");
     map.put("Kuwait", "KW");
     map.put("Cayman Islands", "KY");
     map.put("Kazakhstan", "KZ");
     map.put("Laos", "LA");
     map.put("Lebanon", "LB");
     map.put("Saint Lucia", "LC");
     map.put("Liechtenstein", "LI");
     map.put("Sri Lanka", "LK");
     map.put("Liberia", "LR");
     map.put("Lesotho", "LS");
     map.put("Lithuania", "LT");
     map.put("Luxembourg", "LU");
     map.put("Latvia", "LV");
     map.put("Libya", "LY");
     map.put("Morocco", "MA");
     map.put("Monaco", "MC");
     map.put("Moldavia", "MD");
     map.put("Madagascar", "MG");
     map.put("Marshall Islands", "MH");
     map.put("Macedonia", "MK");
     map.put("Mali", "ML");
     map.put("Myanmar", "MM");
     map.put("Mongolia", "MN");
     map.put("Macau", "MO");
     map.put("Northern Mariana Islands", "MP");
     map.put("Martinique (French)", "MQ");
     map.put("Mauritania", "MR");
     map.put("Montserrat", "MS");
     map.put("Malta", "MT");
     map.put("Mauritius", "MU");
     map.put("Maldives", "MV");
     map.put("Malawi", "MW");
     map.put("Mexico", "MX");
     map.put("Malaysia", "MY");
     map.put("Mozambique", "MZ");
     map.put("Namibia", "NA");
     map.put("New Caledonia (French)", "NC");
     map.put("Niger", "NE");
     map.put("Norfolk Island", "NF");
     map.put("Nigeria", "NG");
     map.put("Nicaragua", "NI");
     map.put("Netherlands", "NL");
     map.put("Norway", "NO");
     map.put("Nepal", "NP");
     map.put("Nauru", "NR");
     map.put("Neutral Zone", "NT");
     map.put("Niue", "NU");
     map.put("New Zealand", "NZ");
     map.put("Oman", "OM");
     map.put("Panama", "PA");
     map.put("Peru", "PE");
     map.put("Polynesia (French)", "PF");
     map.put("Papua New Guinea", "PG");
     map.put("Philippines", "PH");
     map.put("Pakistan", "PK");
     map.put("Poland", "PL");
     map.put("Saint Pierre And Miquelon", "PM");
     map.put("Pitcairn Island", "PN");
     map.put("Puerto Rico", "PR");
     map.put("Portugal", "PT");
     map.put("Palau", "PW");
     map.put("Paraguay", "PY");
     map.put("Qatar", "QA");
     map.put("Reunion (French)", "RE");
     map.put("Romania", "RO");
     map.put("Russian Federation", "RU");
     map.put("Rwanda", "RW");
     map.put("Saudi Arabia", "SA");
     map.put("Solomon Islands", "SB");
     map.put("Seychelles", "SC");
     map.put("Sudan", "SD");
     map.put("Sweden", "SE");
     map.put("Singapore", "SG");
     map.put("Saint Helena", "SH");
     map.put("Slovenia", "SI");
     map.put("Svalbard And Jan Mayen Islands", "SJ");
     map.put("Slovak Republic", "SK");
     map.put("Sierra Leone", "SL");
     map.put("San Marino", "SM");
     map.put("Senegal", "SN");
     map.put("Somalia", "SO");
     map.put("Suriname", "SR");
     map.put("Saint Tome (Sao Tome) And Principe", "ST");
     map.put("Former USSR", "SU");
     map.put("El Salvador", "SV");
     map.put("Syria", "SY");
     map.put("Swaziland", "SZ");
     map.put("Turks And Caicos Islands", "TC");
     map.put("Chad", "TD");
     map.put("French Southern Territories", "TF");
     map.put("Togo", "TG");
     map.put("Thailand", "TH");
     map.put("Tadjikistan", "TJ");
     map.put("Tokelau", "TK");
     map.put("Turkmenistan", "TM");
     map.put("Tunisia", "TN");
     map.put("Tonga", "TO");
     map.put("East Timor", "TP");
     map.put("Turkey", "TR");
     map.put("Trinidad And Tobago", "TT");
     map.put("Tuvalu", "TV");
     map.put("Taiwan", "TW");
     map.put("Tanzania", "TZ");
     map.put("Ukraine", "UA");
     map.put("Uganda", "UG");
     map.put("United Kingdom", "UK");
     map.put("USA Minor Outlying Islands", "UM");
     map.put("United States", "US");
     map.put("Uruguay", "UY");
     map.put("Uzbekistan", "UZ");
     map.put("Holy See (Vatican City State)", "VA");
     map.put("Saint Vincent & Grenadines", "VC");
     map.put("Venezuela", "VE");
     map.put("Virgin Islands (British)", "VG");
     map.put("Virgin Islands (USA)", "VI");
     map.put("Vietnam", "VN");
     map.put("Vanuatu", "VU");
     map.put("Wallis And Futuna Islands", "WF");
     map.put("Samoa", "WS");
     map.put("Yemen", "YE");
     map.put("Mayotte", "YT");
     map.put("Yugoslavia", "YU");
     map.put("South Africa", "ZA");
     map.put("Zambia", "ZM");
     map.put("Zaire", "ZR");
     map.put("Zimbabwe", "ZW");

    }

     public String getCode(String country){
     String countryFound = map.get(country);
     if(countryFound==null){
             countryFound="UK";
     }
     return countryFound;
     }
}
person Mark    schedule 04.01.2013
comment
это предназначено? map.put(, ОБРАЗОВАТЕЛЬНОЕ ОБРАЗОВАНИЕ); - person Buffalo; 13.05.2013
comment
Сомневаюсь, что это сработает - если пользователь поставит Афганистан вместо Афганистана Исламское Государство, карта ничего не подхватит? - person Simon; 13.10.2015
comment
Пожалуйста, имейте в виду, что страны со временем могут меняться (добавляться/удаляться, они меняют свое название и т. д.); поэтому, с моей точки зрения, не стоит жестко кодировать список стран... - person Ben; 30.11.2015

Перечисление CountryCode, содержащееся в com .neovisionaries:nv-i18n:1.11 (или более поздней версии) содержит findByName методов для вывода списка кодов стран, названия которых соответствуют заданному шаблону.

List<CountryCode> findByName(String regex);
List<CountryCode> findByName(Pattern pattern);

Чтобы получить "CH" от "Швейцария":

String code =  CountryCode.findByName("Switzerland").get(0).name();


Гитхаб

https://github.com/TakahikoKawasaki/nv-i18n

JavaDoc

http://takahikokawasaki.github.io/nv-i18n/

Мавен

<dependency>
    <groupId>com.neovisionaries</groupId>
    <artifactId>nv-i18n</artifactId>
    <version>1.11</version>
</dependency>
person Takahiko Kawasaki    schedule 15.02.2014
comment
эта библиотека доступна на других языках? например, названия стран на испанском, французском и т. д. - person Progs; 20.05.2017

Используйте Map, а не массив, тогда вам не нужно перебирать его, вы просто ищете его.

O(1) vs O(n)

//Do this once
Map<String,Locale> map = new HashMap<String,Locale>();
for (Locale locale : Locale.getAvailableLocales()) {
  map.put(locale.getDisplayCountry(), locale);
}
person Qwerky    schedule 04.01.2013
comment
Дэн, ты меня опередил. Конечно, это предполагает, что вы стандартизируете названия стран — USA, U.S.A., US of A и United States of America не будут хорошо сочетаться друг с другом. - person user; 04.01.2013
comment
Я предполагаю, что есть стандартизация. - person Chris; 04.01.2013
comment
Это лишь частично отвечает на вопрос — использование карты в качестве структуры данных — хорошая идея, но это не объясняет, как заполнить карту (где взять данные). - person assylias; 04.01.2013
comment
Я думаю, что получить данные не проблема: java2s.com/Code/Java/I18N /Getalistofcountrynames.htm - person Chris; 04.01.2013
comment
@Chris - когда дело доходит до пользовательского ввода, никогда не стоит предполагать, что они будут соответствовать стандарту. - person SDC; 04.01.2013
comment
Ты прав. Я использую раскрывающийся список со стандартизированными значениями, поэтому пользовательский ввод не представляет проблемы. Как ты и сказал ;) - person Chris; 04.01.2013

Это определенно тот ответ, который вы ищете, уже поздно, но, надеюсь, он кому-то поможет.

String[] isoCountries = Locale.getISOCountries();
    for (String country : isoCountries) {
        Locale locale = new Locale("en", country);
        String iso = locale.getISO3Country();
        String code = locale.getCountry();
        String name = locale.getDisplayCountry();
        System.out.println(iso + " " + code + " " + name);

    }

Я добавил оператор печати, чтобы вы могли хорошо рассмотреть результат. Вы можете заменить «CH» на эту переменную страны в третьей строке, и это даст вам «Афганистан».

person Adindu Stevens    schedule 02.07.2018

Нет, у вас уже есть простое решение: решение с массивом (или таблицей БД, или ключевой структурой, такой как хэш-карта) — это в значительной степени стандартный способ сделать это. Я предполагаю, что также могут быть доступны некоторые веб-сервисы, которые могут предоставить список, но я думаю, что это было бы излишним (не стоит полагаться на стороннюю систему для работы с чем-то таким простым). Подобные массивы можно было бы использовать для списков округов/провинций/штатов внутри страны, если вам нужен такой уровень детализации.

Единственное, чего следует остерегаться, это то, что если вы принимаете название страны в качестве пользовательского ввода, вам нужно будет следить за орфографическими ошибками, неправильным написанием заглавных букв и использованием альтернативных названий для стран (например, «Швейцария» может быть законно указано как «Schweiz», «Suisse», «Швейцарская Конфедерация» или ряд других вариантов.

Чаще всего пользовательский ввод ограничивается известными кодами стран за счет предоставления выпадающего списка, так что пользователь выбирает страну, которую он хочет, и программа сразу узнает, что это «CH». Это также требует, чтобы тот же массив был на месте, но на него ссылались в другом направлении, и это более надежно (поскольку для каждой страны существует только один возможный код).

Также обратите внимание, что хотя список стран в мире не сильно меняется, он изменяется. Вы должны убедиться, что вы поддерживаете его в актуальном состоянии.

person SDC    schedule 04.01.2013

привязать флаг к URL-адресу (https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/flags/1x1/)

INSERT INTO `countries` (`name`, `code`, `c_code`, `flag`) VALUES

('Afghanistan', '+93', 'AF', 'af.svg'),
('Albania', '+355', 'AL', 'al.svg'),
('Algeria', '+213', 'DZ', 'dz.svg'),
('American Samoa', '+1 684', 'AS', 'as.svg'),
('Andorra', '+376', 'AD', 'ad.svg'),
('Angola', '+244', 'AO', 'ao.svg'),
('Anguilla', '+1 264', 'AI', 'ai.svg'),
('Antigua and Barbuda', '+1 268', 'AG', 'ag.svg'),
('Argentina', '+54', 'AR', 'ar.svg'),
('Armenia', '+374', 'AM', 'am.svg'),
('Aruba', '+297', 'AW', 'aw.svg'),
('Australia', '+61', 'AU', 'au.svg'),
('Austria', '+43', 'AT', 'at.svg'),
('Azerbaijan', '+994', 'AZ', 'az.svg'),
('Bahamas', '+1 242', 'BS', 'bs.svg'),
('Bahrain', '+973', 'BH', 'bh.svg'),
('Bangladesh', '+880', 'BD', 'bd.svg'),
('Barbados', '+1 246', 'BB', 'bb.svg'),
('Belarus', '+375', 'BY', 'by.svg'),
('Belgium', '+32', 'BE', 'be.svg'),
('Belize', '+501', 'BZ', 'bz.svg'),
('Benin', '+229', 'BJ', 'bj.svg'),
('Bermuda', '+1 441', 'BM', 'bm.svg'),
('Bhutan', '+975', 'BT', 'bt.svg'),
('Bolivia', '+591', 'BO', 'bo.svg'),
('Bosnia and Herzegovina', '+387', 'BA', 'ba.svg'),
('Botswana', '+267', 'BW', 'bw.svg'),
('Brazil', '+55', 'BR', 'br.svg'),
('British Indian Ocean Territory', '+246', 'IO', 'io.svg'),
('British Virgin Islands', '+1 284', 'VG', 'vg.svg'),
('Brunei', '+673', 'BN', 'bn.svg'),
('Bulgaria', '+359', 'BG', 'bg.svg'),
('Burkina Faso', '+226', 'BF', 'bf.svg'),
('Burundi', '+257', 'BI', 'bi.svg'),
('Cambodia', '+855', 'KH', 'kh.svg'),
('Cameroon', '+237', 'CM', 'cm.svg'),
('Canada', '+1', 'CA', 'ca.svg'),
('Cape Verde', '+238', 'CV', 'cv.svg'),
('Cayman Islands', '+ 345', 'KY', 'ky.svg'),
('Central African Republic', '+236', 'CF', 'cf.svg'),
('Chad', '+235', 'TD', 'td.svg'),
('Chile', '+56', 'CL', 'cl.svg'),
('China', '+86', 'CN', 'cn.svg'),
('Christmas Island', '+61', 'CX', 'cx.svg'),
('Colombia', '+57', 'CO', 'co.svg'),
('Comoros', '+269', 'KM', 'km.svg'),
('Congo', '+242', 'CG', 'cg.svg'),
('Congo, Dem. Rep. of (Zaire)', '+243', 'CD', 'cd.svg'),
('Cook Islands', '+682', 'CK', 'ck.svg'),
('Costa Rica', '+506', 'CR', 'cr.svg'),
('Croatia', '+385', 'HR', 'hr.svg'),
('Cuba', '+53', 'CU', 'cu.svg'),
('Curacao', '+599', 'CW', 'cw.svg'),
('Cyprus', '+537', 'CY', 'cy.svg'),
('Czech Republic', '+420', 'CZ', 'cz.svg'),
('Denmark', '+45', 'DK', 'dk.svg'),
('Djibouti', '+253', 'DJ', 'dj.svg'),
('Dominica', '+1 767', 'DM', 'dm.svg'),
('Dominican Republic', '+1 809', 'DO', 'do.svg'),
('East Timor', '+670', 'TR', 'tr.svg'),
('Ecuador', '+593', 'EC', 'ec.svg'),
('Egypt', '+20', 'EG', 'eg.svg'),
('El Salvador', '+503', 'SV', 'sv.svg'),
('Equatorial Guinea', '+240', 'GQ', 'gq.svg'),
('Eritrea', '+291', 'ER', 'er.svg'),
('Estonia', '+372', 'EE', 'ee.svg'),
('Ethiopia', '+251', 'ET', 'et.svg'),
('Falkland Islands', '+500', 'FK', 'fk.svg'),
('Faroe Islands', '+298', 'FO', 'fo.svg'),
('Fiji', '+679', 'FJ', 'fj.svg'),
('Finland', '+358', 'FI', 'fi.svg'),
('France', '+33', 'FR', 'fr.svg'),
('French Guiana', '+594', 'GF', 'gf.svg'),
('French Polynesia', '+689', 'PF', 'pf.svg'),
('Gabon', '+241', 'GA', 'ga.svg'),
('Gambia', '+220', 'GM', 'gm.svg'),
('Georgia', '+995', 'GE', 'ge.svg'),
('Germany', '+49', 'DE', 'de.svg'),
('Ghana', '+233', 'GH', 'gh.svg'),
('Gibraltar', '+350', 'GI', 'gi.svg'),
('Greece', '+30', 'GR', 'gr.svg'),
('Greenland', '+299', 'GL', 'gl.svg'),
('Grenada', '+1 473', 'GD', 'gd.svg'),
('Guadeloupe', '+590', 'GP', 'gp.svg'),
('Guam', '+1 671', 'GU', 'gu.svg'),
('Guatemala', '+502', 'GT', 'gt.svg'),
('Guinea', '+224', 'GN', 'gn.svg'),
('Guinea-Bissau', '+245', 'GW', 'gw.svg'),
('Guyana', '+595', 'GY', 'gy.svg'),
('Haiti', '+509', 'HT', 'ht.svg'),
('Honduras', '+504', 'HN', 'hn.svg'),
('Hong Kong', '+852', 'HK', 'hk.svg'),
('Hungary', '+36', 'HU', 'hu.svg'),
('Iceland', '+354', 'IS', 'is.svg'),
('India', '+91', 'IN', 'in.svg'),
('Indonesia', '+62', 'ID', 'id.svg'),
('Iran', '+98', 'IR', 'ir.svg'),
('Iraq', '+964', 'IQ', 'iq.svg'),
('Ireland', '+353', 'IE', 'ie.svg'),
('Israel', '+972', 'IL', 'il.svg'),
('Italy', '+39', 'IT', 'it.svg'),
('Ivory Coast', '+225', 'CI', 'ci.svg'),
('Jamaica', '+1 876', 'JM', 'jm.svg'),
('Japan', '+81', 'JP', 'jp.svg'),
('Jordan', '+962', 'JO', 'jo.svg'),
('Kazakhstan', '+7 7', 'KZ', 'kz.svg'),
('Kenya', '+254', 'KE', 'ke.svg'),
('Kiribati', '+686', 'KI', 'ki.svg'),
('Kuwait', '+965', 'KW', 'kw.svg'),
('Kyrgyzstan', '+996', 'KG', 'kg.svg'),
('Laos', '+856', 'LA', 'la.svg'),
('Latvia', '+371', 'LV', 'lv.svg'),
('Lebanon', '+961', 'LB', 'lb.svg'),
('Lesotho', '+266', 'LS', 'ls.svg'),
('Liberia', '+231', 'LR', 'lr.svg'),
('Libya', '+218', 'LY', 'ly.svg'),
('Liechtenstein', '+423', 'LI', 'li.svg'),
('Lithuania', '+370', 'LT', 'lt.svg'),
('Luxembourg', '+352', 'LU', 'lu.svg'),
('Macau', '+853', 'MO', 'mo.svg'),
('Macedonia', '+389', 'MK', 'mk.svg'),
('Madagascar', '+261', 'MG', 'mg.svg'),
('Malawi', '+265', 'MW', 'mw.svg'),
('Malaysia', '+60', 'MY', 'my.svg'),
('Maldives', '+960', 'MV', 'mv.svg'),
('Mali', '+223', 'ML', 'ml.svg'),
('Malta', '+356', 'MT', 'mt.svg'),
('Marshall Islands', '+692', 'MH', 'mh.svg'),
('Martinique', '+596', 'MQ', 'mq.svg'),
('Mauritania', '+222', 'MR', 'mr.svg'),
('Mauritius', '+230', 'MU', 'mu.svg'),
('Mayotte', '+262', 'YT', 'yt.svg'),
('Mexico', '+52', 'MX', 'mx.svg'),
('Micronesia', '+691', 'FM', 'fm.svg'),
('Moldova', '+373', 'MD', 'md.svg'),
('Monaco', '+377', 'MC', 'mc.svg'),
('Mongolia', '+976', 'MN', 'mn.svg'),
('Montenegro', '+382', 'ME', 'me.svg'),
('Montserrat', '+1664', 'MS', 'ms.svg'),
('Morocco', '+212', 'MA', 'ma.svg'),
('Myanmar', '+95', 'MM', 'mm.svg'),
('Namibia', '+264', 'NA', 'na.svg'),
('Nauru', '+674', 'NR', 'nr.svg'),
('Nepal', '+977', 'NP', 'np.svg'),
('Netherlands', '+31', 'NL', 'nl.svg'),
('Saint Kitts and Nevis', '+1', 'KN', 'kn.svg'),
('New Caledonia', '+687', 'NC', 'nc.svg'),
('New Zealand', '+64', 'NZ', 'nz.svg'),
('Nicaragua', '+505', 'NI', 'ni.svg'),
('Niger', '+227', 'NE', 'ne.svg'),
('Nigeria', '+234', 'NG', 'ng.svg'),
('Niue', '+683', 'NU', 'nu.svg'),
('Norfolk Island', '+672', 'NF', 'nf.svg'),
('North Korea', '+850', 'KP', 'kp.svg'),
('Northern Mariana Islands', '+1 670', 'MP', 'mp.svg'),
('Norway', '+47', 'NO', 'no.svg'),
('Oman', '+968', 'OM', 'om.svg'),
('Pakistan', '+92', 'PK', 'pk.svg'),
('Palau', '+680', 'PW', 'pw.svg'),
('Panama', '+507', 'PA', 'pa.svg'),
('Papua New Guinea', '+675', 'PG', 'pg.svg'),
('Paraguay', '+595', 'PY', 'py.svg'),
('Peru', '+51', 'PE', 'pe.svg'),
('Philippines', '+63', 'PH', 'ph.svg'),
('Poland', '+48', 'PL', 'pl.svg'),
('Portugal', '+351', 'PT', 'pt.svg'),
('Puerto Rico', '+1 787', 'PR', 'pr.svg'),
('Qatar', '+974', 'QA', 'qa.svg'),
('Reunion', '+262', 'RE', 're.svg'),
('Romania', '+40', 'RO', 'ro.svg'),
('Russia', '+7', 'RU', 'ru.svg'),
('Rwanda', '+250', 'RW', 'rw.svg'),
('Samoa', '+685', 'WS', 'ws.svg'),
('San Marino', '+378', 'SM', 'sm.svg'),
('Saudi Arabia', '+966', 'SA', 'sa.svg'),
('Senegal', '+221', 'SN', 'sn.svg'),
('Serbia', '+381', 'RS', 'rs.svg'),
('Seychelles', '+248', 'SC', 'sc.svg'),
('Sierra Leone', '+232', 'SL', 'sl.svg'),
('Singapore', '+65', 'SG', 'sg.svg'),
('Slovakia', '+421', 'SK', 'sk.svg'),
('Slovenia', '+386', 'SI', 'si.svg'),
('Solomon Islands', '+677', 'SB', 'sb.svg'),
('South Africa', '+27', 'ZA', 'za.svg'),
('South Georgia and the South Sandwich Islands', '+500', 'GS', 'gs.svg'),
('South Korea', '+82', 'KR', 'kr.svg'),
('Spain', '+34', 'ES', 'es.svg'),
('Sri Lanka', '+94', 'LK', 'lk.svg'),
('Sudan', '+249', 'SD', 'sd.svg'),
('Suriname', '+597', 'SR', 'sr.svg'),
('Swaziland', '+268', 'SZ', 'sz.svg'),
('Sweden', '+46', 'SE', 'se.svg'),
('Switzerland', '+41', 'CH', 'ch.svg'),
('Syria', '+963', 'SY', 'sy.svg'),
('Taiwan', '+886', 'TW', 'tw.svg'),
('Tajikistan', '+992', 'TJ', 'tj.svg'),
('Tanzania', '+255', 'TZ', 'tz.svg'),
('Thailand', '+66', 'TH', 'th.svg'),
('Timor Leste', '+670', 'TL', 'tl.svg'),
('Togo', '+228', 'TG', 'tg.svg'),
('Tokelau', '+690', 'TK', 'tk.svg'),
('Tonga', '+676', 'TO', 'to.svg'),
('Trinidad and Tobago', '+1 868', 'TT', 'tt.svg'),
('Tunisia', '+216', 'TN', 'tn.svg'),
('Turkey', '+90', 'TR', 'tr.svg'),
('Turkmenistan', '+993', 'TM', 'tm.svg'),
('Turks and Caicos Islands', '+1 649', 'TC', 'tc.svg'),
('Tuvalu', '+688', 'TV', 'tv.svg'),
('Uganda', '+256', 'UG', 'ug.svg'),
('Ukraine', '+380', 'UA', 'ua.svg'),
('United Arab Emirates', '+971', 'AE', 'ae.svg'),
('United Kingdom', '+44', 'GB', 'gb.svg'),
('United States', '+1', 'US', 'us.svg'),
('Uruguay', '+598', 'UY', 'uy.svg'),
('Uzbekistan', '+998', 'UZ', 'uz.svg'),
('Vanuatu', '+678', 'VU', 'vu.svg'),
('Venezuela', '+58', 'VE', 've.svg'),
('Vietnam', '+84', 'VN', 'vn.svg'),
('Wallis and Futuna', '+681', 'WF', 'wf.svg'),
('Yemen', '+967', 'YE', 'ye.svg'),
('Zambia', '+260', 'ZM', 'zm.svg'),
('Zimbabwe', '+263', 'ZW', 'zw.svg')
person piyushiiitm    schedule 25.11.2016

public static void main(String[] args) throws Exception {
    System.out.println(getCountryCodeFromName("Switzerland"));
}

public static String getCountryCodeFromName(String country) {
    return Arrays.asList(Locale.getISOCountries())
            .stream()
            .map((s) -> new Locale("", s))
            .filter((l) -> l.getDisplayCountry().toLowerCase().equals(country.toLowerCase()))
            .findFirst()
            .map((l) -> l.getCountry().toLowerCase())
            .orElse("UNKNOWN");
}

обратите внимание, что вы будете проходить поток каждый раз, когда вы вызываете метод, более эффективно использовать карту или сохранять результат в таблице поиска.

person DrAhmedJava    schedule 12.11.2018

Я предполагаю, что самый простой способ Java 8+ - использовать класс Java Locale.

Два простых метода для соответствия каждой стране на любом языке.

public static Optional<String> getCountryCodeByName(String name, String lang){
    Optional<Locale> locale = getLocaleByName(name,lang);
    return locale.map(Locale::getCountry);
}

public static Optional<Locale> getLocaleByName(String name, String lang){
    return Arrays.stream(Locale.getAvailableLocales())
            .filter(l -> l.getDisplayCountry(Locale.forLanguageTag(lang)).equalsIgnoreCase(name))
            .findFirst();
}
person Markus G.    schedule 03.08.2020

Для тех, кому нужно на немецком:

package at.ciit.apf.common.util;

import java.util.HashMap;
import java.util.Map;

public class CountryUtil {
private static Map<String,String> map = new HashMap<>();

static {
    initCountries();
}

public static String getCountryFromCountryCode(String countryCode){
    if (countryCode==null) return "";
    String result = map.get(countryCode.toUpperCase());
    if (result==null) result = "";
    return result;
}

private static void initCountries() {
    map.put("AF","Afghanistan");
    map.put("EG","Ägypten");
    map.put("AX","Ålandinseln");
    map.put("AL","Albanien");
    map.put("DZ","Algerien");
    map.put("AS","Amerikanisch Samoa");
    map.put("AD","Andorra");
    map.put("AO","Angola");
    map.put("AI","Anguilla");
    map.put("AQ","Antarktis");
    map.put("AG","Antigua und Barbuda");
    map.put("GQ","Äquatorialguinea");
    map.put("AR","Argentinien");
    map.put("AM","Armenien");
    map.put("AW","Aruba");
    map.put("AZ","Aserbaidschan");
    map.put("ET","Äthiopien");
    map.put("AU","Australien");
    map.put("BS","Bahamas");
    map.put("BH","Bahrain");
    map.put("BD","Bangladesch");
    map.put("BB","Barbados");
    map.put("BY","Belarus");
    map.put("BE","Belgien");
    map.put("BZ","Belize");
    map.put("BJ","Benin");
    map.put("BM","Bermuda");
    map.put("BT","Bhutan");
    map.put("BO","Bolivien");
    map.put("BQ","Bonaire, Sint Eustatius und Saba");
    map.put("BA","Bosnien und Herzegowina");
    map.put("BW","Botswana");
    map.put("BV","Bouvetinsel");
    map.put("BR","Brasilien");
    map.put("IO","Britisches Territorium im Indischen Ozean");
    map.put("BN","Brunei");
    map.put("BG","Bulgarien");
    map.put("BF","Burkina Faso");
    map.put("BI","Burundi");
    map.put("CL","Chile");
    map.put("CN","China");
    map.put("CK","Cookinseln");
    map.put("CR","Costa Rica");
    map.put("CW","Curaçao");
    map.put("DK","Dänemark");
    map.put("CD","Demokratische Republik Kongo");
    map.put("DE","Deutschland");
    map.put("DM","Dominica");
    map.put("DO","Dominikanische Republik");
    map.put("DJ","Dschibuti");
    map.put("EC","Ecuador");
    map.put("SV","El Salvador");
    map.put("CI","Elfenbeinküste");
    map.put("ER","Eritrea");
    map.put("EE","Estland");
    map.put("SZ","Eswatini");
    map.put("FK","Falklandinseln");
    map.put("FO","Färöer-Inseln");
    map.put("FJ","Fidschi");
    map.put("FI","Finnland");
    map.put("FR","Frankreich");
    map.put("GF","Französisch-Guayana");
    map.put("PF","Französisch-Polynesien");
    map.put("TF","Französische Süd- und Antarktisgebiete");
    map.put("GA","Gabun");
    map.put("GM","Gambia");
    map.put("GE","Georgien");
    map.put("GH","Ghana");
    map.put("GI","Gibraltar");
    map.put("GD","Grenada");
    map.put("GR","Griechenland");
    map.put("GL","Grönland");
    map.put("GP","Guadeloupe");
    map.put("GU","Guam");
    map.put("GT","Guatemala");
    map.put("GG","Guernsey");
    map.put("GN","Guinea");
    map.put("GW","Guinea-Bissau");
    map.put("GY","Guyana");
    map.put("HT","Haiti");
    map.put("HM","Heard und McDonaldinseln");
    map.put("HN","Honduras");
    map.put("HK","Hongkong");
    map.put("IN","Indien");
    map.put("ID","Indonesien");
    map.put("IM","Insel Man");
    map.put("IQ","Irak");
    map.put("IR","Iran");
    map.put("IE","Irland");
    map.put("IS","Island");
    map.put("IL","Israel");
    map.put("IT","Italien");
    map.put("JM","Jamaika");
    map.put("JP","Japan");
    map.put("YE","Jemen");
    map.put("JE","Jersey");
    map.put("JO","Jordanien");
    map.put("VG","Jungferninseln (UK)");
    map.put("VI","Jungferninseln (US)");
    map.put("KY","Kaimaninseln");
    map.put("KH","Kambodscha");
    map.put("CM","Kamerun");
    map.put("CA","Kanada");
    map.put("CV","Kap Verde");
    map.put("KZ","Kasachstan");
    map.put("QA","Katar");
    map.put("KE","Kenia");
    map.put("KG","Kirgisistan");
    map.put("KI","Kiribati");
    map.put("CC","Kokosinseln");
    map.put("CO","Kolumbien");
    map.put("KM","Komoren");
    map.put("XK","Kosovo");
    map.put("HR","Kroatien");
    map.put("CU","Kuba");
    map.put("KW","Kuwait");
    map.put("LA","Laos");
    map.put("LS","Lesotho");
    map.put("LV","Lettland");
    map.put("LB","Libanon");
    map.put("LR","Liberia");
    map.put("LY","Libyen");
    map.put("LI","Liechtenstein");
    map.put("LT","Litauen");
    map.put("LU","Luxemburg");
    map.put("MO","Macau");
    map.put("MG","Madagaskar");
    map.put("MW","Malawi");
    map.put("MY","Malaysia");
    map.put("MV","Malediven");
    map.put("ML","Mali");
    map.put("MT","Malta");
    map.put("MA","Marokko");
    map.put("MH","Marshallinseln");
    map.put("MQ","Martinique");
    map.put("MR","Mauretanien");
    map.put("MU","Mauritius");
    map.put("YT","Mayotte");
    map.put("MX","Mexiko");
    map.put("FM","Mikronesien");
    map.put("MD","Moldawien");
    map.put("MC","Monaco");
    map.put("MN","Mongolei");
    map.put("ME","Montenegro");
    map.put("MS","Montserrat");
    map.put("MZ","Mosambik");
    map.put("MM","Myanmar");
    map.put("NA","Namibia");
    map.put("NR","Nauru");
    map.put("NP","Nepal");
    map.put("NC","Neukaledonien");
    map.put("NZ","Neuseeland");
    map.put("NI","Nicaragua");
    map.put("NL","Niederlande");
    map.put("NE","Niger");
    map.put("NG","Nigeria");
    map.put("NU","Niue");
    map.put("KP","Nordkorea");
    map.put("MP","Nördliche Marianen");
    map.put("MK","Nordmazedonien");
    map.put("NF","Norfolkinsel");
    map.put("NO","Norwegen");
    map.put("OM","Oman");
    map.put("AT","Österreich");
    map.put("TL","Osttimor");
    map.put("PK","Pakistan");
    map.put("PS","Palästina");
    map.put("PW","Palau");
    map.put("PA","Panama");
    map.put("PG","Papua-Neuguinea");
    map.put("PY","Paraguay");
    map.put("PE","Peru");
    map.put("PH","Philippinen");
    map.put("PN","Pitcairninseln");
    map.put("PL","Polen");
    map.put("PT","Portugal");
    map.put("PR","Puerto Rico");
    map.put("CG","Republik Kongo");
    map.put("RE","Réunion");
    map.put("RW","Ruanda");
    map.put("RO","Rumänien");
    map.put("RU","Russland");
    map.put("MF","Saint Martin");
    map.put("SB","Salomonen");
    map.put("ZM","Sambia");
    map.put("WS","Samoa");
    map.put("SM","San Marino");
    map.put("BL","Sankt Bartholomäus");
    map.put("ST","São Tomé und Príncipe");
    map.put("SA","Saudi-Arabien");
    map.put("SE","Schweden");
    map.put("CH","Schweiz");
    map.put("SN","Senegal");
    map.put("RS","Serbien");
    map.put("SC","Seychellen");
    map.put("SL","Sierra Leone");
    map.put("ZW","Simbabwe");
    map.put("SG","Singapur");
    map.put("SX","Sint Maarten");
    map.put("SK","Slowakei");
    map.put("SI","Slowenien");
    map.put("SO","Somalia");
    map.put("ES","Spanien");
    map.put("LK","Sri Lanka");
    map.put("SH","St. Helena");
    map.put("KN","St. Kitts und Nevis");
    map.put("LC","St. Lucia");
    map.put("PM","St. Pierre und Miquelon");
    map.put("VC","St. Vincent und die Grenadinen");
    map.put("ZA","Südafrika");
    map.put("SD","Sudan");
    map.put("GS","Südgeorgien und die Südlichen Sandwichinseln");
    map.put("KR","Südkorea");
    map.put("SS","Südsudan");
    map.put("SR","Suriname");
    map.put("SJ","Svalbard und Jan Mayen");
    map.put("SY","Syrien");
    map.put("TJ","Tadschikistan");
    map.put("TW","Taiwan");
    map.put("TZ","Tansania");
    map.put("TH","Thailand");
    map.put("TG","Togo");
    map.put("TK","Tokelau");
    map.put("TO","Tonga");
    map.put("TT","Trinidad und Tobago");
    map.put("TD","Tschad");
    map.put("CZ","Tschechien");
    map.put("TN","Tunesien");
    map.put("TR","Türkei");
    map.put("TM","Turkmenistan");
    map.put("TC","Turks und Caicosinseln");
    map.put("TV","Tuvalu");
    map.put("UG","Uganda");
    map.put("UA","Ukraine");
    map.put("HU","Ungarn");
    map.put("UY","Uruguay");
    map.put("UZ","Usbekistan");
    map.put("VU","Vanuatu");
    map.put("VA","Vatikanstadt");
    map.put("VE","Venezuela");
    map.put("AE","Vereinigte Arabische Emirate");
    map.put("US","Vereinigte Staaten von Amerika");
    map.put("GB","Vereinigtes Königreich");
    map.put("VN","Vietnam");
    map.put("WF","Wallis und Futuna");
    map.put("CX","Weihnachtsinsel");
    map.put("EH","Westsahara");
    map.put("CF","Zentralafrikanische Republik");
    map.put("CY","Zypern");
}

}
person Michael    schedule 12.02.2021