文件实现省市三级联动

转载 2016年08月30日 15:35:00

 


2,一个简单的方案

 

将数据拷贝到一个district.data.dic文本里面。 

邮政编码一共6位,1-2位代表省,3-4位代表市,5-6位代表区/县。 

所以,可以直接将这个数据存储成一个3级树形结构。

3,代码实现

首先判断 1-2位,找到1级省。 

然后找到3-4位,判断市,最后5-6位是区/县

import com.google.common.base.Strings;
import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DistrictUtils {
    static class Tree {
        private String code;
        private String name;
        private Map<String, Tree> children = new HashMap<String, Tree>();
        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;
        }
        public Map<String, Tree> getChildren() {
            return children;
        }
        public void addChildrenTree(String childrenCode, Tree childrenTree) {
            this.children.put(childrenCode, childrenTree);
        }
    }
    private static Map<String, Tree> addressTreeMap = new HashMap<String, Tree>();
    static {
        try {
            // 取得运行时路径
            String basePath = DistrictUtils.class.getResource("/").toString().replace("file:", "");
<span style="white-space:pre">	</span>    System.out.println(basePath);
            List<String> lines = Files.readAllLines(new File(basePath + "district.data.dic").toPath(), Charset.forName("utf-8"));
            //循环数据。
            for (String line : lines) {
                if (!Strings.isNullOrEmpty(line) && line.length() > 7) {
                    String code = line.substring(0, 6);
                    String name = line.substring(7);
                    //里面包括了1种特殊的空格(\u3000特殊的中文空格!!!)。
                    name = name.replaceAll("\t", "").replaceAll("\\u3000", "").replaceAll(" ", "");
                    String codeTmp1 = code.substring(0, 2);
                    String codeTmp2 = code.substring(2, 4);
                    String codeTmp3 = code.substring(4, 6);
                    //找到根节点。
                    if (codeTmp2.equals("00") && codeTmp3.equals("00")) {
                        Tree baseTree = new Tree();
                        baseTree.setCode(code);
                        baseTree.setName(name);
                        addressTreeMap.put(code, baseTree);
                    } else if (codeTmp3.equals("00")) {//找到二级节点
                        Tree secondTree = new Tree();
                        secondTree.setCode(code);
                        secondTree.setName(name);
                        //找到根节点,然后增加子树。
                        Tree baseTree = addressTreeMap.get(codeTmp1 + "0000");
                        if (baseTree != null) {
                            baseTree.addChildrenTree(code, secondTree);
                        } else {
                            System.err.println("no tree " + codeTmp1 + "0000");
                        }
                    } else {//剩下是3级节点。
                        Tree thirdTree = new Tree();
                        thirdTree.setCode(code);
                        thirdTree.setName(name);
                        //找到根节点。
                        Tree baseTree = addressTreeMap.get(codeTmp1 + "0000");
                        //然后找到二级节点,再增加子树。
                        Tree secondTree = baseTree.getChildren().get(codeTmp1 + codeTmp2 + "00");
                        if (secondTree != null) {
                            secondTree.addChildrenTree(code, thirdTree);
                        } else {
                            System.err.println("no tree " + codeTmp1 + codeTmp2 + "00");
                        }
                    }
                }
            }
        } catch (Exception e) {
        }
    }
    public static void loopTree(Tree addressTree, int level) {
        for (int i = 0; i < level; i++) {
            System.out.print("├─");
        }
        System.out.printf("[%s][%s]\n", addressTree.getCode(), addressTree.getName());
        int nextLevel = level + 1;
        for (Tree addressTreeTemp : addressTree.getChildren().values()) {
            loopTree(addressTreeTemp, nextLevel);
        }
    }

    public static void main(String[] args) {
        System.out.println();
        System.out.println();
        for (Tree addressTree : addressTreeMap.values()) {
            loopTree(addressTree, 1);
        }
    }
}


嵌入式Linux文件与串口编程

本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础
  • 2015年12月02日 09:31

超简单方法实现省/市/地区级联查询

需要弄一个省、市,地区的级联查询。 页面好做,但是数据不太好弄,不好组织。 开始考虑抓一个现成的数据库,存储成表机构,然后查询。 发现这个是一个效率比较低的方案,但维护起来比较好。 直接对数据库进行操...
  • freewebsys
  • freewebsys
  • 2015-10-26 22:00:49
  • 4483

基于AngularJs + Bootstrap + AngularStrap 省市区联动实践

什么是 AngularJs?网上一大堆资料,没能真正说明白。 AngularJs 就是一个函数库,算不上一个框架,源码2万2千多行,提供了前端MVC的开发方式, 有双向绑定,指令等特性,这是具有革命性...
  • zoutongyuan
  • zoutongyuan
  • 2014-09-20 14:20:37
  • 41734

ajax技术实现select三级联动

本文利用ajax技术从数据库中获取数据,动态实现select三级联动,效果图如下: 前端js代码如下: $(document).ready(function(){ $.ajax({ typ...
  • adgjlxxx
  • adgjlxxx
  • 2015-12-18 17:22:11
  • 2488

省市区县纯js三级联动(改写版:可获取选择值)

省市县纯js三级联动并获取选项值
  • lv_shijun
  • lv_shijun
  • 2014-09-21 14:18:08
  • 8730

简单易懂的jquery版三级联动select

selectList *{margin:0;padding:0;} .selectList{width:200px;margin:50px auto;} ...
  • johnjobs
  • johnjobs
  • 2014-12-01 10:43:03
  • 1874

Angularjs自定义指令之省市区三级联动

先上图 代码                   jQuery.min.js">                   ...
  • baidu_31333625
  • baidu_31333625
  • 2016-10-21 10:28:29
  • 842

Angularjs自定义指令之三级联动---地理位置的选择

先上图 代码                                         select {         width : 116px;       }  ...
  • u014788227
  • u014788227
  • 2016-02-23 16:10:27
  • 3228

中国七大<em>地区+</em>省<em>联动</em>JSON<em>文件</em>

2016-09-06 上传大小:2KB 中国七大<em>地区地区</em>和省<em>联动地区</em>和省JSON<em>地区</em>和省 中国七大<em>地区</em>和省JSON<em>文件</em>中国七大地区 <em>地区</em>和省<em>联动</em> <em>地区</em>和省JSON <em>地区</em>和省 ...
  • 2018年04月14日 00:00

文件实现省市三级联动

2,一个简单的方案   将数据拷贝到一个district.data.dic文本里面。  邮政编码一共6位,1-2位代表省,3-4位代表市,5-6位代表区/县。  所以,可以直接...
  • u014421556
  • u014421556
  • 2016-08-30 15:35:00
  • 490
收藏助手
不良信息举报
您举报文章:文件实现省市三级联动
举报原因:
原因补充:

(最多只允许输入30个字)