java 省份小工具

发布时间 2023-06-02 08:22:48作者: zno2

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * GB/T 2260-2007
 * @author witas
 *
 */
public class ProvinceUtils {

    private static final String PROV = 
            "110000_京_华北_北京市\r\n" + 
            "120000_津_华北_天津市\r\n" + 
            "130000_冀_华北_河北省\r\n" + 
            "140000_晋_华北_山西省\r\n" + 
            "150000_蒙_华北_内蒙古自治区\r\n" + 
            "210000_辽_东北_辽宁省\r\n" + 
            "220000_吉_东北_吉林省\r\n" + 
            "230000_黑_东北_黑龙江省\r\n" + 
            "310000_沪_华东_上海市\r\n" + 
            "320000_苏_华东_江苏省\r\n" + 
            "330000_浙_华东_浙江省\r\n" + 
            "340000_皖_华东_安徽省\r\n" + 
            "350000_闽_华南_福建省\r\n" + 
            "360000_赣_华中_江西省\r\n" + 
            "370000_鲁_华东_山东省\r\n" + 
            "410000_豫_华中_河南省\r\n" + 
            "420000_鄂_华中_湖北省\r\n" + 
            "430000_湘_华中_湖南省\r\n" + 
            "440000_粤_华南_广东省\r\n" + 
            "450000_桂_华南_广西壮族自治区\r\n" + 
            "460000_琼_华南_海南省\r\n" + 
            "500000_渝_西南_重庆市\r\n" + 
            "510000_川_西南_四川省\r\n" + 
            "520000_贵_西南_贵州省\r\n" + 
            "530000_云_西南_云南省\r\n" + 
            "540000_藏_西南_西藏自治区\r\n" + 
            "610000_陕_西北_陕西省\r\n" + 
            "620000_甘_西北_甘肃省\r\n" + 
            "630000_青_西北_青海省\r\n" + 
            "640000_宁_西北_宁夏回族自治区\r\n" + 
            "650000_新_西北_新疆维吾尔自治区\r\n" + 
            "710000_台_港澳台_台湾省\r\n" + 
            "810000_港_港澳台_香港特别行政区\r\n" + 
            "820000_澳_港澳台_澳门特别行政区";
    private static final Map<Integer,Prov> PROV_MAP = new HashMap<>();
    private static final List<Prov> PROV_LIST = new ArrayList<>();
    static {
        String[] splits = PROV.split("\r\n");
        for (String s : splits) {
            String[] items = s.split("_");
            
            Prov prov = new Prov();
            prov.setCode(Integer.valueOf(items[0]));
            prov.setShortName(items[1]);
            prov.setArea(items[2]);
            prov.setName(items[3]);
            PROV_LIST.add(prov);
            
            PROV_MAP.put(Integer.valueOf(items[0]), prov);
        }
    }
    
    
    
    
    /**
     * 获取省名
     * @param code
     * @return
     */
    public static String getProv(Integer code) {
        Prov prov = PROV_MAP.get(code);
        if(prov != null) {
            return prov.getName();
        }
        return code+"";
    }
    
    public static Map<Integer,Prov> getProvMap(){
        Map<Integer,Prov> result = new HashMap<>();
        for(Prov p : PROV_LIST) {
            result.put(p.getCode(), JSONObject.parseObject(JSONObject.toJSONString(p), Prov.class));
        }
        return result;
    }
    
    
    /**
     * 获取省份列表
     * @return
     */
    public static List<Prov> getProvList(){
        return JSONArray.parseArray(JSONObject.toJSONString(PROV_LIST), Prov.class);
    }
    
    /**
     * 获取地域省份
     * @param area
     * @return
     */
    public static List<Prov> getArea(String area){
        Area a= Area.forName(area);
        return getArea(a);
    }
    /**
     * 获取地域省份
     * @param area
     * @return
     */
    public static List<Prov> getArea(Area area){
        if(area == null) {
            return new ArrayList<>();
        }
        List<Prov> list = new ArrayList<>();
        for(Prov p : PROV_LIST) {
            if(p.getArea().equals(area.getName())) {
                list.add(JSONObject.parseObject(JSONObject.toJSONString(p), Prov.class));
            }
        }
        return list;
    }
    
    /**
     * 获取地域 
     * @param code
     * @return
     */
    public static Area toArea(Integer code) {
        Prov prov = PROV_MAP.get(code);
        return toArea(prov);
    }

    /**
     * 获取地域
     * @param prov
     * @return
     */
    public static Area toArea(Prov prov) {
        if(prov == null || prov.getArea()== null) {
            return null;
        }
        Area a= Area.forName(prov.getArea());
        return a;
    }
    
    
    
    public static enum Area {
        XB("西北"),
        XN("西南"),
        HB("华北"),
        HZ("华中"),
        HN("华南"),
        HD("华东"),
        DB("东北"),
        ;
        
        private String name;
        private Area(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        public static Area forName(String area) {
            Area a=null;
            try {
                a = Area.valueOf(area);
            } catch (Exception e) {
            }
            if(a == null) {
                if(Area.XB.getName().equals(area)) {
                    a = Area.XB;
                }else if(Area.XN.getName().equals(area)) {
                    a = Area.XN;
                }else if(Area.HB.getName().equals(area)) {
                    a = Area.HB;
                }else if(Area.HZ.getName().equals(area)) {
                    a = Area.HZ;
                }else if(Area.HN.getName().equals(area)) {
                    a = Area.HN;
                }else if(Area.HD.getName().equals(area)) {
                    a = Area.HD;
                }else if(Area.DB.getName().equals(area)) {
                    a = Area.DB;
                }
            }
            return a;
        }
    }
    
    public static class Prov {
        private Integer code;
        private String shortName;
        private String name;
        private String area;
        public Integer getCode() {
            return code;
        }
        public void setCode(Integer code) {
            this.code = code;
        }
        public String getShortName() {
            return shortName;
        }
        public void setShortName(String shortName) {
            this.shortName = shortName;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getArea() {
            return area;
        }
        public void setArea(String area) {
            this.area = area;
        }
        @Override
        public String toString() {
            return code + "_" + shortName + "_" + name + "_" + area;
        }
    }
}