如何根据城市名称获取城市编号

发布时间 2023-09-06 21:30:11作者: hwj7

要根据城市名称获取城市编号,首先要创建一CityCodeUtils工具类

public class CityCodeUtils {

    private static Properties properties = new Properties();
    public static String DEFAULT_CODE = "101010100";

    private CityCodeUtils() {
    }

    static  {
        ClassLoader classLoader = CityCodeUtils.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("citycodes.properties");
        try {
            properties.load(new InputStreamReader(is, "UTF-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String getCityCode(String cityName) {
        String code = properties.getProperty(cityName);
        return code;
    }
}

其次,确保已经在项目的类路径下创建了名为citycodes.properties的属性文件,并在文件中定义了城市名称和对应的城市编号。例如,citycodes.properties文件内容可能如下所示:

北京=101010100
海淀=101010200
朝阳=101010300
顺义=101010400
怀柔=101010500
通州=101010600

使用CityCodeUtils类中的getCityCode方法。该方法将根据给定的城市名称从citycodes.properties文件中查找并返回对应的城市编号

如果citycodes.properties文件中的城市名称在读取时出现乱码,可能是由于文件的编码方式与Java虚拟机的默认编码方式不匹配所导致的。可以尝试以下方法来解决乱码问题:

1、确保citycodes.properties文件使用UTF-8编码保存。您可以使用文本编辑器(如Notepad++、Sublime Text等)来检查和更改文件的编码方式。

2、在加载citycodes.properties文件之前,将InputStream包装在InputStreamReader中,并指定正确的字符编码。例如,如果citycodes.properties文件使用UTF-8编码保存,可以使用以下代码:

static {
    ClassLoader classLoader = CityCodeUtils.class.getClassLoader();
    InputStream is = classLoader.getResourceAsStream("citycodes.properties");
    try {
        properties.load(new InputStreamReader(is, "UTF-8"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

通过将InputStream包装在InputStreamReader中,并指定正确的字符编码为UTF-8,可以确保在加载citycodes.properties文件时正确地解析城市名称。

如果citycodes.properties文件使用其他编码方式保存,请相应地更改InputStreamReader的字符编码。

3、在使用properties.getProperty方法获取城市编号之前,确保使用UTF-8编码进行解码。例如,可以使用以下代码:

public static String getCityCode(String cityName) {
    String code = properties.getProperty(cityName);
    if (code == null) {
        code = DEFAULT_CODE;
    } else {
        try {
            code = new String(code.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    return code;
}

通过使用new String(code.getBytes("ISO-8859-1"), "UTF-8")将获取的城市编号重新解码为UTF-8编码,可以确保正确地处理城市名称中的乱码。

根据实际情况选择适合的解决方案,并确保citycodes.properties文件的编码方式与Java虚拟机的默认编码方式匹配。