全国行政区划读取到内存中

复制全国行政区划内容到一个txt文件,改为utf-8格式(打开文件另存为另一个文件时可以选择编码)

http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html

以下便是逐行读取到一个map对象中的代码

package com.vtradex.ehub.lbs.utils;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aliyun.openservices.shade.com.alibaba.rocketmq.shade.com.alibaba.fastjson.JSON;
import com.aliyun.openservices.shade.org.apache.commons.codec.Charsets;
import com.google.common.collect.Maps;
import com.google.common.io.Files;

public class AdministrativeArea {

	private static HashMap<String, String> map = Maps.newHashMap();

	private static Logger logger=LoggerFactory.getLogger(AdministrativeArea.class);
	/**
	 * 以行为单位读取文件,常用于读面向行的格式化文件
	 * @return
	 */
	static{
		File file = new File(AdministrativeArea.class.getResource("/AdministrativeArea.txt").getFile());
		List<String> list;
		String code,name;
		try {
			list = Files.readLines(file, Charsets.UTF_8);
			for (String tempString : list) {
				if (!tempString.equals("")) {
					code=getCode(tempString);
					name=getChinese(tempString);
					//市辖区不用存储
					if(name.equals("市辖区")) {
						name="";
					}
					map.put(code,name);
				}
			}
			logger.info("全国行政区:"+JSON.toJSONString(map));
		} catch (IOException e) {
			logger.error("读取全国行政区失败,检查是否存在文件和文件编码是否为utf-8");
			e.printStackTrace();
		}

	}

	public static String getMatcher(String regex, String str) {
		String result = "";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(str);
		while (matcher.find()) {
			result = matcher.group(1);
		}
		return result;
	}

	//截取编码
	protected static String getCode(String str) {
		return getMatcher("(\\d+).*", str);
	}
    //截取行政区名称
	protected static String getChinese(String str) {
		return getMatcher("([\u4e00-\u9fa5].*)", str);
	}

	//判断字符串是否匹配正则
	public static boolean matches(String regex, String str) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(str);
		return matcher.matches();
	}

	//判断是否为行政区编码
	public static boolean isAreaCode(String code) {
		String regex="[1-9]\\d{5}(?!\\d)";
		return matches(regex, code);
	}

	public static String getNameByCode(String code) {
		//判断字符串长度是否为6位
		if(code==null||code.equals("")||!isAreaCode(code)) {
			return "";
		}
		String name="";
		//根据行政区规则,判断是否有上一级行政区,最后两位不为0说明是三级行政区,中间两位
		String provinceCode=code.substring(0, 2)+"0000";
		String cityCode=code.substring(0, 4)+"00";
		//获取省份
		if(code.equals(provinceCode)) {
			name=map.get(provinceCode);
		}else if(code.equals(cityCode)) {
			name=map.get(provinceCode)+map.get(cityCode);
		}else {
			name=map.get(provinceCode)+map.get(cityCode)+map.get(code);
		}
		return name;
	}

	public static void main(String[] args) {
		System.out.println(getNameByCode("445102"));
	}

}

  

时间: 2024-08-12 12:11:04

全国行政区划读取到内存中的相关文章

安卓实现读取手机内存中的所有音乐

读取手机内存中的音乐信息需要做如下几步: 1)创建一个XML文件,存放获取到的信息,使用ListView控件 2)创建一个新的XML文件,对LIstView中的item对象进行布局 3)需要创建一个Music类用于存放需要获取的Music的主要信息 4)需要创建一个帮助类,用于获取手机中的音乐信息,并通过一个集合类传递获取到的信息 5)创建一个自定义适配器,用于加载ListView的每个子Item 6)实现对数据的加载,并返回到用户界面 主要的代码实现如下: 一.帮助类模块 public Arr

数据库的应用——直接从内存中读取osg节点 (转)

数据库的应用——直接从内存中读取osg节点 目的:要从数据库中读取节点数据到osg. 一开始的方法是这样的,每当我要添加一个数据库中的节点数据时,首先把它读取到内存中,然后写入一个文件,最后再次从文件中用osg的osgDB::readNodeFile()读取,这个方法是可行的,但是却很糟糕.我的初衷是不要经过文件转换. 现在问题解决了,多亏了osg::ReaderWriter提供一个虚函数: virtual ReadResult  readNode (std::istream &, const

ffmpeg 从内存中读取数据

http://blog.csdn.net/leixiaohua1020/article/details/12980423 ffmpeg一般情况下支持打开一个本地文件,例如"C:\test.avi" 或者是一个流媒体协议的URL,例如"rtmp://222.31.64.208/vod/test.flv" 其打开文件的函数是avformat_open_input(),直接将文件路径或者流媒体URL的字符串传递给该函数就可以了. 但其是否支持从内存中读取数据呢?这个问题困

C# 操作地址 从内存中读取写入数据(初级)

本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是  CE. 由于每次启动游戏, 游戏中阳光地址都是变的, 唯一不变的基址1, 我们要通过CE工具找到基址1的地址, 可以算出阳光的地址. 基址2的地址 = 基址1中的值 + 偏移1; 阳光的的地址 = 基址2中的值 + 偏移2; 以下为简单示例:  窗口界面一个按钮 和 一个定时器 using System; using System.Co

深入理解计算机系统 1.4 处理器读取和解释存储在内存中的指令

到如今,我们的hello.c源程序已经已经被编译系统翻译为可运行对象文件了,这个可运行对象文件叫做hello,被存储在磁盘上.为了在Unix系统上运行可运行文件,我们在一个叫做shell的应用程序中输入它的名字: unix> ./hello hello, world unix> shell程序是一个命令行解释器,它打印出一条提示,等着你输入一条命令行.然后运行命令.如果输入的命令行的第一个单词没有匹配到内建的shell命令.那么shell如果这个单词是一个可运行文件的名字.这个文件应该被载入进

Windows口令安全与破解之--Getpass本地内存中读取windows口令

[实验目的] 1).理解Getpass本地内存中读取windows口令的原理 2)学习Getpass本地内存中读取windows口令的过程 [实验原理] 我们之前学习的是通过获得SAM,破解SAM来获得管理口令,今天我们介绍的是getpass这款软件,在2012年被开发出来,可以直接从 lsass.exe 里获取windows处于active状态账号明文密码.比破解SAM更快,更准. [实验环境] Getpass常用于黑客在已经获得目标系统webshell,且拥有system权限时的操作,此次实

JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExceptio

使用SndPlaySound从内存中播放WAV

有些时候,我们写的程序需要播放音乐,一般大家会采用以下几种方式:1.把音乐文件放置在某个特定的目录,例如Sound,WAV,Music供程序读取播放:2.使用资源来存放音乐.有些人估计也是使用这个方法的,不过大部分人可能是先从资源里把音乐文件释放出来,然后再去读取播放.我今天要介绍的方式是直接把音乐文件载入内存,然后从内存中进行读取播放.好了给代码吧:var  hResInfo: THandle;  PtrSound: Pointer;begin  hResInfo := FindResourc

SQL Server 内存中OLTP内部机制概述(一)

----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory OLTP Internals Overview>:http://technet.microsoft.com/en-us/library/dn720242.aspx ----------------------------我是分割线------------------------------- SQL S