¿Alguien sabe de un paquete java 1.5 de acceso libre que proporciona una lista de códigos de país ISO 3166-1 como enumeración o EnumMap? Específicamente necesito los "elementos de código ISO 3166-1-alfa-2", es decir, el código de país de 2 caracteres como "us", "uk", "de", etc. Crear uno es bastante simple (aunque tedioso), pero si hay uno estándar que ya está en apache o algo similar que ahorraría un poco de tiempo.¿Hay una java enum de código abierto en los códigos de país ISO 3166-1
Respuesta
Este código obtiene 242 países en Sun Java 6:
String[] countryCodes = Locale.getISOCountries();
Aunque the ISO website afirma que hay 249 elementos ISO 3166-1 código alfa-2, aunque los javadoc enlaces a la misma información.
Hay una manera fácil de generar esta enumeración con el nombre del idioma. Ejecutar este código para generar la lista de campos de enumeración para pegar:
/**
* 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) + "\"),");
}
}
Esto le da una lista de idiomas, no de países. – user27478
Así es como me genera una enumeración con el código del país + nombre del país:
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);
}
}
agregó una línea en la impresión para habilitar intellitxt – NimChimpsky
Eso no es una enumeración. – David
@David genera el cuerpo de una enumeración – Bozho
Esto todavía no responde a la pregunta. También estaba buscando un tipo de enumerador para esto, y no encontré nada. Algunos ejemplos utilizando hashtable aquí, pero representan lo mismo que el incorporado obtener
Me gustaría un enfoque diferente. Así que he creado un script en Python para generar automáticamente la lista en 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
donde el archivo datos.txt es un simple copiar y pegar & de la mesa de Wikipedia (basta con retirar todas las líneas adicionales, asegurándose de que tiene un país código y nombre del país por línea).
A continuación, sólo tiene que colocar esto en su clase estática:
/**
* 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! ...
//
}
ahora una implementación de código de país (ISO 3166-1alpha-2/alpha-3/numeric) lista como enumeración de Java está disponible en GitHub bajo Apache License versión 2.0.
Ejemplo:
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
Última edición 2016-Jun-09
enum countryCode fue empaquetado en com.neovisionaries.i18n con otras enumeraciones de Java, languageCode (ISO 639-1) , LanguageAlpha3Code (ISO 639-2), LocaleCode, ScriptCode (ISO 15924) y CurrencyCode (ISO 4217) y registrado en el Repositorio Central de Maven.
Maven
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-i18n</artifactId>
<version>1.22</version>
</dependency>
Gradle
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"
¡Hola Takahiko gracias por eso! Acabo de agregar tres países faltantes, lo siento, tenía prisa y simplemente bifurqué el repositorio, encontrará las actualizaciones aquí: https://github.com/bbossola/CountryCode –
Hola Bruno! Gracias por encontrar las entradas faltantes (AL, AN y GN). Me referí a su repositorio bifurcado y los copié manualmente en mi repositorio. ¡Gracias! –
Muchas gracias_ por esta biblioteca. –
No sabía acerca de esta cuestión hasta que tuve hace poco mi enumeración de Java de código abierto precisamente para este propósito! Increíble coincidencia!
Puse todo el código fuente en mi blog con la licencia de BSD caluse 3, así que no creo que nadie tenga ninguna información al respecto.
Se puede encontrar aquí. https://subversivebytes.wordpress.com/2013/10/07/java-iso-3166-java-enum/
Espero que sea útil y alivie los dolores de desarrollo.
Su lista no se encuentra en Israel ... – Alicia
Si ya va a depender de la configuración regional de Java, a continuación, se sugiere emplear un HashMap sencilla en lugar de crear nuevas clases para los países etc.
Así es como yo lo usaría si tuviera que depender de la localización de Java solamente:
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());
}
Después de que llene el mapa, puede obtener el código ISO del nombre del país siempre que lo necesite. O puede convertirlo en un código ISO en el mapa del nombre del país, simplemente modifique el método 'poner' en consecuencia.
una enumeración de java, pero una versión de este JSON está disponible en http://country.io/names.json
Si alguien ya está utilizando el Amazon AWS SDK incluye com.amazonaws.services.route53domains.model.CountryCode
. Sé que esto no es ideal, pero es una alternativa si ya usa AWS SDK. Para la mayoría de los casos usaría nv-i18n
de Takahiko ya que, como él menciona, implementa ISO 3166-1.
He creado una enumeración, que se ocupa por el nombre del país inglés. Ver country-util.
En cada enumeración, puede llamar al getLocale()
para obtener la configuración regional de Java.
Desde la configuración regional puede obtener toda la información a la que está acostumbrado, fx el código de país de dos letras 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;
}
Pro:
- peso ligero
- Mapas a entornos nacionales Java
- direccionables por el nombre completo del país valores
- Enum no están codificados, sino que genera una llamada a Locale.getISOCountries(). Es decir: simplemente vuelva a compilar el proyecto con la versión más nueva de Java para obtener los cambios realizados en la lista de países reflejada en la enumeración.
contra:
- No en repositorio de Maven
- Lo más probable es simple/menos expresiva que las otras soluciones, que no conozco.
- Creado para mis propias necesidades/no como tal mantenido. - Probablemente deberías clonar el repositorio.
- 1. ¿Hay un buen paquete de iconos de banderas que corresponda a los códigos de país ISO-3166?
- 2. TimeZoneInfo y códigos de país
- 3. ¿Hay una implementación de código abierto de Java de R2RML?
- 4. Lista de códigos de país - C#
- 5. código de Java para convertir códigos de país alfa-2 (IN) a alpha 3 (IND)
- 6. Conversión de códigos de país a nombres de país
- 7. Maxip GeoIP País/Ciudad Alternativa de código abierto de MySQL
- 8. ¿Existe una lista de códigos de país/país con acceso público?
- 9. ¿Cómo agrego una nueva moneda a java.util.Currency para un código de país existente en Java 7?
- 10. ¿Hay algunas bibliotecas de código abierto de CAD en Java?
- 11. ¿Hay algún analizador EDIFACT de código abierto bueno en Java?
- 12. ¿Hay utilidades o jarras de reflexión Java de código abierto?
- 13. ¿Qué generador de códigos QR de código abierto recomendaría?
- 14. ¿Hay soluciones de código abierto CAPTCHA disponibles?
- 15. ¿Hay constantes para los códigos de idioma en java o en una biblioteca java?
- 16. ¿Hay algún libro que estudie código abierto de Java?
- 17. ¿Hay algún motor AI de código abierto?
- 18. ¿Cómo obtener el código de país ISO en aplicaciones de Android?
- 19. ¿Existe una manera simple de obtener el código de idioma de un código de país en PHP
- 20. ¿Hay una impresora PDF de código abierto escrita en C++?
- 21. IOS: código de país
- 22. ¿hay un servidor asp.net de código abierto?
- 23. ¿Hay alguna herramienta de línea de comando de código abierto para refactorizar el código de Java?
- 24. ¿Hay algún virus de código abierto?
- 25. ¿Hay buenos geoparsers de código abierto disponibles?
- 26. ¿Hay una biblioteca de código abierto de Java para analizar archivos de Excel 2007?
- 27. ¿Hay un repositorio de código abierto para código SQL?
- 28. ¿Hay alguna biblioteca de memoria temporal jerárquica de código abierto?
- 29. ¿Hay algún editor HTML de código abierto como stackoverflow?
- 30. ¿Puedo obtener una descripción de texto de un código de moneda ISO en Java?
Tenga en cuenta que ISO 3166-1-alpha-2 para Gran Bretaña no es GB como en su pregunta. –
@Ken Sí, puedes, pero debes mantener esa lista y mantenerla sincronizada con wikipedia. El problema crece ... – jontejj