有沒有人知道免費提供的java 1.5包,它提供了一個ISO 3166-1國家代碼列表作爲enum或EnumMap?具體而言,我需要「ISO 3166-1-alpha-2代碼元素」,即「us」,「uk」,「de」等2個字符的國家代碼。創建一個足夠簡單(儘管乏味),但如果有一個標準的已經出現在阿帕奇地區或類似的地方,這將節省一點時間。是否有ISO 3166-1國家代碼的開源java枚舉
回答
這段代碼獲得242個國家的Sun Java 6:
String[] countryCodes = Locale.getISOCountries();
雖然the ISO website索賠有249 ISO 3166-1-α-2碼元,雖然javadoc鏈接到相同的信息。
有一種簡單的方法可以用語言名稱生成這個枚舉。 執行該代碼來生成枚舉字段列表貼:
/**
* This is the code used to generate the enum content
*/
public static void main(String[] args) {
String[] codes = java.util.Locale.getISOLanguages();
for (String isoCode: codes) {
Locale locale = new Locale(isoCode);
System.out.println(isoCode.toUpperCase() + "(\"" + locale.getDisplayLanguage(locale) + "\"),");
}
}
下面是如何產生與國家代碼+國家名稱的枚舉:
package countryenum;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
public class CountryEnumGenerator {
public static void main(String[] args) {
String[] countryCodes = Locale.getISOCountries();
List<Country> list = new ArrayList<Country>(countryCodes.length);
for (String cc : countryCodes) {
list.add(new Country(cc.toUpperCase(), new Locale("", cc).getDisplayCountry()));
}
Collections.sort(list);
for (Country c : list) {
System.out.println("/**" + c.getName() + "*/");
System.out.println(c.getCode() + "(\"" + c.getName() + "\"),");
}
}
}
class Country implements Comparable<Country> {
private String code;
private String name;
public Country(String code, String name) {
super();
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Country o) {
return this.name.compareTo(o.name);
}
}
這仍然沒有回答這個問題。我也在爲此尋找一種調查員,但沒有找到任何東西。這裏使用散列表的一些例子,但代表相同的內置獲取
我會去一個不同的方法。所以,我創建了一個Python腳本來自動生成Java名單:
#!/usr/bin/python
f = open("data.txt", 'r')
data = []
cc = {}
for l in f:
t = l.split('\t')
cc = { 'code': str(t[0]).strip(),
'name': str(t[1]).strip()
}
data.append(cc)
f.close()
for c in data:
print """
/**
* Defines the <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO_3166-1_alpha-2</a>
* for <b><i>%(name)s</i></b>.
* <p>
* This constant holds the value of <b>{@value}</b>.
*
* @since 1.0
*
*/
public static final String %(code)s = \"%(code)s\";""" % c
其中data.txt文件是維基百科表的簡單複製粘貼&(只是刪除所有多餘的線條,確保你有一個國家每行代碼和國家名稱)。
,只須將這個到您的靜態類:
/**
* Holds <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO_3166-1_alpha-2</a>
* constant values for all countries.
*
* @since 1.0
*
* </p>
*/
public class CountryCode {
/**
* Constructor defined as <code>private</code> purposefully to ensure this
* class is only used to access its static properties and/or methods.
*/
private CountryCode() { }
/**
* Defines the <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO_3166-1_alpha-2</a>
* for <b><i>Andorra</i></b>.
* <p>
* This constant holds the value of <b>{@value}</b>.
*
* @since 1.0
*
*/
public static final String AD = "AD";
//
// and the list goes on! ...
//
}
現在的國家代碼(ISO 3166-1alpha-2/alpha-3/numeric)列表作爲Java的枚舉的實現是在Apache許可證2.0版可以在GitHub上。
實施例:
CountryCode cc = CountryCode.getByCode("JP");
System.out.println("Country name = " + cc.getName()); // "Japan"
System.out.println("ISO 3166-1 alpha-2 code = " + cc.getAlpha2()); // "JP"
System.out.println("ISO 3166-1 alpha-3 code = " + cc.getAlpha3()); // "JPN"
System.out.println("ISO 3166-1 numeric code = " + cc.getNumeric()); // 392
最後編輯 2016君09
COUNTRYCODE枚舉包入com.neovisionaries.i18n與其他Java枚舉,語言代碼(ISO 639-1) ,LanguageAlpha3Code(ISO 639-2),LocaleCode,ScriptCode(ISO 15924)和CurrencyCode(ISO 4217)並註冊進入Maven Central Repository。
的Maven
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-i18n</artifactId>
<version>1.22</version>
</dependency>
搖籃
dependencies {
compile 'com.neovisionaries:nv-i18n:1.22'
}
的GitHub
https://github.com/TakahikoKawasaki/nv-i18n
的Javadoc
http://takahikokawasaki.github.com/nv-i18n/
OSGi的
Bundle-SymbolicName: com.neovisionaries.i18n
Export-Package: com.neovisionaries.i18n;version="1.22.0"
我不知道這個問題,直到我最近纔開源我的Java枚舉出於這樣的目的!驚人的巧合!
我把整個源代碼放在我的博客上,並帶有BSD caluse 3許可證,所以我不認爲有人會對此有任何疑問。
可以在這裏找到。 https://subversivebytes.wordpress.com/2013/10/07/java-iso-3166-java-enum/
希望它是有用的,並緩解發展的痛苦。
如果您已經將依賴於Java語言環境,那麼我建議使用一個簡單的HashMap,而不是創建新類等國家。
這是我會怎麼使用它,如果我是要依賴於Java本地化只有:
private HashMap<String, String> countries = new HashMap<String, String>();
String[] countryCodes = Locale.getISOCountries();
for (String cc : countryCodes) {
// country name , country code map
countries.put(new Locale("", cc).getDisplayCountry(), cc.toUpperCase());
}
填寫地圖後,您可以在需要時從國家/地區獲得ISO代碼。 或者您也可以將其設置爲國家/地區名稱地圖的ISO代碼,只需相應地修改'put'方法即可。
不是Java枚舉,但是這是一個JSON版本可在http://country.io/names.json
如果有人已經在使用亞馬遜AWS SDK,它包括com.amazonaws.services.route53domains.model.CountryCode
。我知道這並不理想,但如果您已經使用AWS開發工具包,則可以選擇這種方法。對於大多數情況,我會使用Takahiko的nv-i18n
,因爲正如他所說,它實現了ISO 3166-1。
我創建了一個枚舉,你用英文國名命名。見country-util。
在每個枚舉上,您可以調用getLocale()
來獲取Java語言環境。
從語言環境中,您可以獲得您習慣的所有信息,例如ISO-3166-1兩字母國家代碼。
public enum Country{
ANDORRA(new Locale("AD")),
AFGHANISTAN(new Locale("AF")),
ANTIGUA_AND_BARBUDA(new Locale("AG")),
ANGUILLA(new Locale("AI")),
//etc
ZAMBIA(new Locale("ZM")),
ZIMBABWE(new Locale("ZW"));
private Locale locale;
private Country(Locale locale){
this.locale = locale;
}
public Locale getLocale(){
return locale;
}
臨:
- 重量輕
- 映射到Java的語言環境
- 尋址通過全國名
- 枚舉值不被硬編碼的,而是靠Locale.getISOCountries調用生成()。那就是:簡單地重新編譯項目與最新的java版本,以便對枚舉中反映的國家列表進行任何更改。
缺點:
- 不能在Maven倉庫
- 最有可能的簡單/比其他解決方案,我不知道少的表現。
- 爲我自己的需要創建/不保持。 - 你應該克隆回購。
- 1. ISO國家代碼
- 2. 獲取ISO國家代碼
- 3. Android獲取ISO國家代碼
- 4. 國家名稱爲ISO 3166-2代碼
- 5. 如何在Qt中獲取國家代碼(不是ISO代碼)
- 6. PHP國際國家代碼2國家代碼的字符
- 7. 轉換國家代碼國家名稱
- 8. 設置基於國家枚舉一個子狀態枚舉
- 9. 我是否應該使用ISO 3166國家代碼(美國)或文化代碼(en-US)?
- 10. 國際海域的國家代碼
- 11. 通過國家代碼檢查手機號碼是否有效
- 12. 是否有SQL代碼的開源庫?
- 13. django國家貨幣代碼
- 14. 目標C:是否有方法枚舉代碼中的屬性?
- 15. 選擇國家和國家代碼?
- 16. 從國家或國家代碼獲取電話代碼 - Twilio
- 17. ISO 3166-1 alpha-2國家/地區代碼的地區名稱
- 18. 用於iso國家代碼的XQuery函數或庫?
- 19. GeoLocation - 獲取國家/地區的ISO代碼
- 20. ISO與奧運國家代碼之間的映射?
- 21. C++獲取國家代碼
- 22. IOS:國家代碼
- 23. 是否可以使Plotly choropleth使用ISO 3166-1 alpha-2國家/地區代碼代替ISO 3166-1 alpha-3來映射國家/地區?
- 24. 是枚舉Java中的枚舉
- 25. 將ISO3國家代碼轉換爲ISO2國家代碼 - Windows Phone 8
- 26. ISO國家/貨幣數據
- 27. 的TimeZoneInfo和國家代碼
- 28. 從國家代碼在python中獲取國家名稱?
- 29. Java中的枚舉開關
- 30. Android ISO國家代碼和標誌資產
請注意,英國的ISO 3166-1-alpha-2是GB而不是英國,因爲您的問題。 – 2013-03-25 16:51:21
@Ken是的,你可以,但你必須保持該列表,並保持與維基百科同步。問題增加... – jontejj 2015-02-12 10:05:43