|
@@ -266,6 +266,15 @@ public class AddrSplitLmrMap {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ public static String deleteDisStr(String addressStr){
|
|
|
+ Matcher disMatcher = Pattern.compile("(新城区|工业区|委员会|开发区|科技园区|村委会)").matcher(addressStr);
|
|
|
+ if (disMatcher.find()) {
|
|
|
+ addressStr = addressStr.substring(disMatcher.end());
|
|
|
+ deleteDisStr(addressStr);
|
|
|
+ }
|
|
|
+ return addressStr;
|
|
|
+ }
|
|
|
+
|
|
|
public static Map<String, String> parseAddress(String addressStr) {
|
|
|
if (addressStr == null || addressStr.trim().isEmpty()) {
|
|
|
return null;
|
|
@@ -273,6 +282,8 @@ public class AddrSplitLmrMap {
|
|
|
addressStr = addressStr.trim();
|
|
|
Map<String, String> returnMap = new HashMap<>();
|
|
|
String remaining = addressStr;
|
|
|
+// 检查是否存在:工业区|委员会|开发区|科技园区|村委会
|
|
|
+ remaining = deleteDisStr(remaining);
|
|
|
// 先替换xx号-xx号
|
|
|
Matcher diyMatcher = Pattern.compile("(\\d号+-\\d号)").matcher(remaining);
|
|
|
if (diyMatcher.find()) {
|
|
@@ -288,9 +299,14 @@ public class AddrSplitLmrMap {
|
|
|
Matcher nongTagMatcher = Pattern.compile("(\\d+(?:-+\\d)?号)").matcher(remaining);
|
|
|
if (nongTagMatcher.find()) {
|
|
|
// 存在\d+(?:-+\d)?号
|
|
|
- returnMap.put("楼栋号", nongTagMatcher.group(1));
|
|
|
- remaining = remaining.substring(nongTagMatcher.end());
|
|
|
+ Matcher nongTagMatcher0 = Pattern.compile("(\\d+-\\d+号)").matcher(remaining);
|
|
|
+ if (nongTagMatcher0.find()) {
|
|
|
+ returnMap.put("楼栋号", nongTagMatcher0.group(1));
|
|
|
+ } else {
|
|
|
+ returnMap.put("楼栋号", nongTagMatcher.group(1));
|
|
|
+ }
|
|
|
} else {
|
|
|
+// 不存在\d+(?:-+\d)?号
|
|
|
returnMap.put("楼栋号", null);
|
|
|
}
|
|
|
} else {
|
|
@@ -343,6 +359,7 @@ public class AddrSplitLmrMap {
|
|
|
/*AddrSplitLmrMap AddrSplitLmrMap = new AddrSplitLmrMap();
|
|
|
AddrSplitLmrMap.initFile();
|
|
|
System.out.println(outAddrMapInAddr("村165号"));
|
|
|
+ System.out.println(outAddrMapInAddr("仓桥镇玉秀路136-16号101室"));
|
|
|
System.out.println(outAddrMapInAddr("上海市松江区乐都路339号松江电信大楼1303室"));
|
|
|
System.out.println(outAddrMapInAddr("云南省昭通市昭阳区永丰镇绿荫社区居民委员会管湾村二十五组205号"));*/
|
|
|
// 测试示例(包含所有典型场景)
|
|
@@ -355,17 +372,5 @@ public class AddrSplitLmrMap {
|
|
|
// private String buildingNumber;
|
|
|
//// 房间号
|
|
|
// private String roomNumber;
|
|
|
-// String testAddress = "北松公路6961弄6-29号205";
|
|
|
-// String testAddress = "香泾路377-1号306室";
|
|
|
-// String testAddress = "新松江路887弄1号611室";
|
|
|
-// String testAddress = "方塔东三村6号506室";
|
|
|
-// String testAddress = "中山西路 36弄 5号 202室";
|
|
|
- String testAddress = "叶榭镇八字桥村镇南31-29号001室";
|
|
|
- Map<String, String> res = parseAddress(testAddress);
|
|
|
- System.out.println("测试地址:" + testAddress);
|
|
|
- System.out.println("路名:" + res.get("路名"));
|
|
|
- System.out.println("弄号:" + res.get("弄号"));
|
|
|
- System.out.println("楼栋号:" + res.get("楼栋号"));
|
|
|
- System.out.println("室号:" + res.get("室号"));
|
|
|
}
|
|
|
}
|