import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
System.out.println(addressResolution("湖北省武汉市洪山区审核镇数据库国际村"));
System.out.println(addressResolution("湖北省恩施土家族苗族自治州恩施市审核镇数据库国际村"));
System.out.println(addressResolution("北京市市辖区朝阳区审核镇数据库国际村"));
System.out.println(addressResolution("内蒙古自治区兴安盟科尔沁右翼前旗审核镇数据库国际村"));
System.out.println(addressResolution("西藏自治区日喀则地区日喀则市审核镇数据库国际村"));
System.out.println(addressResolution("海南省省直辖县级行政单位中沙群岛的岛礁及其海域审核镇数据库国际村"));
System.out.println(addressResolution("上海市市辖区浦东新区张江镇孙环路177弄"));
}
/**
* 解析地址
*
* @author lin
* @param address
* @return
*/
public static Map<String, String> addressResolution(String address) {
// String regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)";
String regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?行政单位|.*?地区|.+盟|市辖区|.*?市|.*?新区|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇|.*?街道)?(?<village>.*)";
Matcher m = Pattern.compile(regex).matcher(address);
String province = null, city = null, county = null, town = null, village = null;
Map<String, String> row = null;
while (m.find()) {
row = new LinkedHashMap<String, String>();
province = m.group("province");
row.put("province", province == null ? "" : province.trim());
city = m.group("city");
row.put("city", city == null ? "" : city.trim());
county = m.group("county");
row.put("county", county == null ? "" : county.trim());
town = m.group("town");
row.put("town", town == null ? "" : town.trim());
village = m.group("village");
row.put("village", village == null ? "" : village.trim());
}
return row;
}
}