|
@@ -28,13 +28,11 @@ public class AddressMatcher {
|
|
addProvinceAndCities("浙江省", "杭州市", "宁波市", "温州市", "嘉兴市", "湖州市", "绍兴市", "金华市", "衢州市", "舟山市", "台州市", "丽水市");
|
|
addProvinceAndCities("浙江省", "杭州市", "宁波市", "温州市", "嘉兴市", "湖州市", "绍兴市", "金华市", "衢州市", "舟山市", "台州市", "丽水市");
|
|
addProvinceAndCities("安徽省", "合肥市", "芜湖市", "蚌埠市", "淮南市", "马鞍山市", "淮北市", "铜陵市", "安庆市", "黄山市", "阜阳市", "宿州市", "滁州市", "六安市", "宣城市", "池州市", "亳州市");
|
|
addProvinceAndCities("安徽省", "合肥市", "芜湖市", "蚌埠市", "淮南市", "马鞍山市", "淮北市", "铜陵市", "安庆市", "黄山市", "阜阳市", "宿州市", "滁州市", "六安市", "宣城市", "池州市", "亳州市");
|
|
addProvinceAndCities("福建省", "福州市", "厦门市", "莆田市", "三明市", "泉州市", "漳州市", "南平市", "龙岩市", "宁德市");
|
|
addProvinceAndCities("福建省", "福州市", "厦门市", "莆田市", "三明市", "泉州市", "漳州市", "南平市", "龙岩市", "宁德市");
|
|
-// addProvinceAndCities("江西省", "南昌市", "景德镇市", "萍乡市", "九江市", "新余市", "鹰潭市", "赣州市", "吉安市", "宜春市", "抚州市", "上饶市");
|
|
|
|
addProvinceAndCities("江西省", "南昌市", "景德镇市", "萍乡市", "九江市", "鹰潭市", "赣州市", "吉安市", "宜春市", "抚州市", "上饶市");
|
|
addProvinceAndCities("江西省", "南昌市", "景德镇市", "萍乡市", "九江市", "鹰潭市", "赣州市", "吉安市", "宜春市", "抚州市", "上饶市");
|
|
addProvinceAndCities("山东省", "济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市", "济宁市", "泰安市", "威海市", "日照市", "临沂市", "德州市", "聊城市", "滨州市", "菏泽市");
|
|
addProvinceAndCities("山东省", "济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市", "济宁市", "泰安市", "威海市", "日照市", "临沂市", "德州市", "聊城市", "滨州市", "菏泽市");
|
|
addProvinceAndCities("河南省", "郑州市", "开封市", "洛阳市", "平顶山市", "安阳市", "鹤壁市", "新乡市", "焦作市", "濮阳市", "许昌市", "漯河市", "三门峡市", "南阳市", "商丘市", "信阳市", "周口市", "驻马店市");
|
|
addProvinceAndCities("河南省", "郑州市", "开封市", "洛阳市", "平顶山市", "安阳市", "鹤壁市", "新乡市", "焦作市", "濮阳市", "许昌市", "漯河市", "三门峡市", "南阳市", "商丘市", "信阳市", "周口市", "驻马店市");
|
|
addProvinceAndCities("湖北省", "武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市", "孝感市", "荆州市", "黄冈市", "咸宁市", "随州市");
|
|
addProvinceAndCities("湖北省", "武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市", "孝感市", "荆州市", "黄冈市", "咸宁市", "随州市");
|
|
addProvinceAndCities("湖南省", "长沙市", "株洲市", "湘潭市", "衡阳市", "邵阳市", "岳阳市", "常德市", "张家界市", "益阳市", "郴州市", "永州市", "怀化市", "娄底市");
|
|
addProvinceAndCities("湖南省", "长沙市", "株洲市", "湘潭市", "衡阳市", "邵阳市", "岳阳市", "常德市", "张家界市", "益阳市", "郴州市", "永州市", "怀化市", "娄底市");
|
|
-// addProvinceAndCities("广东省", "广州市", "深圳市", "珠海市", "汕头市", "佛山市", "韶关市", "湛江市", "肇庆市", "江门市", "茂名市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "中山市", "潮州市", "揭阳市", "云浮市");
|
|
|
|
addProvinceAndCities("广东省", "广州市", "深圳市", "珠海市", "汕头市", "佛山市", "韶关市", "湛江市", "肇庆市", "江门市", "茂名市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "潮州市", "揭阳市", "云浮市");
|
|
addProvinceAndCities("广东省", "广州市", "深圳市", "珠海市", "汕头市", "佛山市", "韶关市", "湛江市", "肇庆市", "江门市", "茂名市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "潮州市", "揭阳市", "云浮市");
|
|
addProvinceAndCities("广西自治区", "南宁市", "柳州市", "桂林市", "梧州市", "北海市", "防城港市", "钦州市", "贵港市", "玉林市", "百色市", "贺州市", "河池市", "来宾市", "崇左市");
|
|
addProvinceAndCities("广西自治区", "南宁市", "柳州市", "桂林市", "梧州市", "北海市", "防城港市", "钦州市", "贵港市", "玉林市", "百色市", "贺州市", "河池市", "来宾市", "崇左市");
|
|
addProvinceAndCities("海南省", "海口市", "三亚市", "三沙市", "儋州市");
|
|
addProvinceAndCities("海南省", "海口市", "三亚市", "三沙市", "儋州市");
|
|
@@ -83,6 +81,7 @@ public class AddressMatcher {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 根据输入的地址匹配省和市
|
|
* 根据输入的地址匹配省和市
|
|
|
|
+ *
|
|
* @param address 输入的地址
|
|
* @param address 输入的地址
|
|
* @return 包含省和市的数组,若未匹配到则返回 null
|
|
* @return 包含省和市的数组,若未匹配到则返回 null
|
|
*/
|
|
*/
|
|
@@ -91,7 +90,7 @@ public class AddressMatcher {
|
|
for (String province : PROVINCE_CITY_MAP.keySet()) {
|
|
for (String province : PROVINCE_CITY_MAP.keySet()) {
|
|
if (address.contains(province)) {
|
|
if (address.contains(province)) {
|
|
for (String city : PROVINCE_CITY_MAP.get(province)) {
|
|
for (String city : PROVINCE_CITY_MAP.get(province)) {
|
|
- if (address.contains(city) &&!isPartOfRoadName(address, city)) {
|
|
|
|
|
|
+ if (address.contains(city) && !isPartOfRoadName(address, city)) {
|
|
return new String[]{province, city};
|
|
return new String[]{province, city};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -106,10 +105,10 @@ public class AddressMatcher {
|
|
for (Map.Entry<String, String> entry : ABBREVIATION_PROVINCE_MAP.entrySet()) {
|
|
for (Map.Entry<String, String> entry : ABBREVIATION_PROVINCE_MAP.entrySet()) {
|
|
String abbreviation = entry.getKey();
|
|
String abbreviation = entry.getKey();
|
|
String province = entry.getValue();
|
|
String province = entry.getValue();
|
|
- if (address.contains(abbreviation) &&!isPartOfRoadName(address, abbreviation)) {
|
|
|
|
|
|
+ if (address.contains(abbreviation) && !isPartOfRoadName(address, abbreviation)) {
|
|
for (String city : PROVINCE_CITY_MAP.get(province)) {
|
|
for (String city : PROVINCE_CITY_MAP.get(province)) {
|
|
String cityAbbreviation = city.replaceAll("市", "");
|
|
String cityAbbreviation = city.replaceAll("市", "");
|
|
- if (address.contains(cityAbbreviation) &&!isPartOfRoadName(address, cityAbbreviation)) {
|
|
|
|
|
|
+ if (address.contains(cityAbbreviation) && !isPartOfRoadName(address, cityAbbreviation)) {
|
|
return new String[]{province, city};
|
|
return new String[]{province, city};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -124,7 +123,7 @@ public class AddressMatcher {
|
|
for (Map.Entry<String, String> entry : ABBREVIATION_CITY_MAP.entrySet()) {
|
|
for (Map.Entry<String, String> entry : ABBREVIATION_CITY_MAP.entrySet()) {
|
|
String cityAbbreviation = entry.getKey();
|
|
String cityAbbreviation = entry.getKey();
|
|
String city = entry.getValue();
|
|
String city = entry.getValue();
|
|
- if (address.contains(cityAbbreviation) &&!isPartOfRoadName(address, cityAbbreviation)) {
|
|
|
|
|
|
+ if (address.contains(cityAbbreviation) && !isPartOfRoadName(address, cityAbbreviation)) {
|
|
String province = CITY_PROVINCE_MAP.get(city);
|
|
String province = CITY_PROVINCE_MAP.get(city);
|
|
if (province != null) {
|
|
if (province != null) {
|
|
return new String[]{province, city};
|
|
return new String[]{province, city};
|
|
@@ -141,28 +140,30 @@ public class AddressMatcher {
|
|
return province.equals("北京市") || province.equals("天津市") || province.equals("上海市") || province.equals("重庆市");
|
|
return province.equals("北京市") || province.equals("天津市") || province.equals("上海市") || province.equals("重庆市");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 只有返回为false时,才会检验成功
|
|
|
|
+ *
|
|
|
|
+ * @param address
|
|
|
|
+ * @param name
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
private static boolean isPartOfRoadName(String address, String name) {
|
|
private static boolean isPartOfRoadName(String address, String name) {
|
|
boolean is = address.contains(name + "路") || address.contains(name + "大道") || address.contains(name + "街");
|
|
boolean is = address.contains(name + "路") || address.contains(name + "大道") || address.contains(name + "街");
|
|
- if(!is){
|
|
|
|
|
|
+ if (!is) {
|
|
int index = address.indexOf(name) + name.length();
|
|
int index = address.indexOf(name) + name.length();
|
|
- if("路道街".contains(address.substring((index + 1) >= address.length() ? address.length() - 1 : (index + 1),
|
|
|
|
- (index + 2) > address.length() ? address.length() : (index + 2)))){
|
|
|
|
|
|
+ String endStr = address.substring(index, Math.min((index + 2), address.length()));
|
|
|
|
+ if(endStr.contains("路") || endStr.contains("道") || endStr.contains("街")){
|
|
return true;
|
|
return true;
|
|
|
|
+ }else{
|
|
|
|
+ is = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return false;
|
|
|
|
|
|
+ return is;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
String address = "石家庄开封南路正定县新疆路123号";
|
|
String address = "石家庄开封南路正定县新疆路123号";
|
|
-// String address = "上海静安南京南路123弄56号B座1204室";
|
|
|
|
-// String address = "河北石家庄正定县新疆路123号";
|
|
|
|
-// String address = "河北石家庄正定县新疆路123号";
|
|
|
|
-// String address = "河北石家庄正定县新疆路123号";
|
|
|
|
-// String address = "河北石家庄正定县新疆路123号";
|
|
|
|
-// String address = "河北石家庄正定县新疆路123号";
|
|
|
|
String[] result = matchProvinceAndCity(address);
|
|
String[] result = matchProvinceAndCity(address);
|
|
if (result != null) {
|
|
if (result != null) {
|
|
System.out.println("省: " + result[0]);
|
|
System.out.println("省: " + result[0]);
|