我的倉庫html
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
· Planning | · 計劃 | 60 | 30 |
· Estimate | · 估計這個任務須要多少時間 | 10 | 10 |
· Development | · 開發 | 180 | 300 |
· Analysis | · 需求分析 (包括學習新技術) | 80 | 50 |
· Design Spec | · 生成設計文檔 | 90 | 60 |
· Design Review | · 設計複審 | 90 | 60 |
· Coding Standard | · 代碼規範 (爲目前的開發制定合適的規範) | 30 | 10 |
· Design | · 具體設計 | 60 | 60 |
· Coding | · 具體編碼 | 180 | 180 |
· Code Review | · 代碼複審 | 90 | 180 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 120 | 480 |
· Reporting Standard | · 報告 | 60 | 60 |
· Test Repor | · 測試報告 | 60 | 60 |
· Size Measurement | · 計算工做量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 過後總結, 並提出過程改進計劃 | 60 | 60 |
· | · 合計 | 1190 | 1620 |
關鍵代碼git
String regex="(?<province>[^省]+自治區|.*?省|.*?行政區|.*?市)(?<city>[^市]+自治州|.*?地區|.*?行政單位|.+盟|市轄區|.*?市|.*?縣)(?<county>[^縣]+縣|.+區|.+市|.+旗|.+海域|.+島)?(?<town>[^區]+區|.+鎮)?(?<village>.*)";
輸入輸出樣例github
//傳入參數 System.out.println(AddressUtil.addressResolutionVersion1("李四,福建省福州13756899511市鼓樓區鼓西街道湖濱路110號湖濱大廈一層")); System.out.println(AddressUtil.addressResolutionVersion1("張三,福建省福州市閩13599622362侯縣上街鎮福州大學10#111")); System.out.println(AddressUtil.addressResolutionVersion1("王五,福建省福州市鼓樓18960221533區123號福州鼓樓醫院")); System.out.println(AddressUtil.addressResolutionVersion1("小美,北京市東15822153326城區交道口東大街1號北京市東城區人民法院")); System.out.println(AddressUtil.addressResolutionVersion1("小陳,廣東省東莞市鳳崗13965231525鎮鳳平路13號")); //控制檯打印結果 {"姓名":"李四","手機":"13756899511","地址":["福建省","福州市","鼓樓區","","鼓西街道湖濱路110號湖濱大廈一層"]} {"姓名":"張三","手機":"13599622362","地址":["福建省","福州市","閩侯縣","上街鎮","福州大學10#111"]} {"姓名":"王五","手機":"18960221533","地址":["福建省","福州市","鼓樓區","","123號福州鼓樓醫院"]} {"姓名":"小美","手機":"15822153326","地址":["北京市","東城區交道口東大街1號北京市","東城區","","人民法院"]} {"姓名":"小陳","手機":"13965231525","地址":["廣東省","東莞市","","鳳崗鎮","鳳平路13號"]}
發現和範例給的要求仍是有區別的正則表達式
修改後的正則表達式算法
String regex="(?<province>[^省]+自治區|.*?省|.*?行政區)?(?<city>[^市]+自治州|.*?地區|.*?行政單位|.+盟|市轄區|.*?市|.*?縣)?(?<county>[^縣]+縣|.+?區|.+市|.+旗|.+海域|.+島)?(?<town>[^區]+區|.+鎮|.+街道)?(?<village>.*)";
類名 | 方法名 | 功能 |
---|---|---|
AreaCodeConvert | void Convert() | 讀取行政區數據文件加載到內存中 |
AddressUtil | void addressResolutionVersion2(String address) | 解析地址(V1已經廢棄) |
- | String getProvince(String address) | 解析省級 |
- | String getCity(String address) | 解析市級 |
- | String getCityWithoutProvince(String address) | 省缺失解析市級 |
- | String getCounty(String address) | 解析縣級 |
- | String getCountyWithoutProvinceAndCity(String address) | 省市缺失解析縣級 |
- | String getCountyWithoutCity(String address) | 市缺失解析縣級 |
http://www.mca.gov.cn/article/sj/xzqh/2019/201908/201908271607.html性能
一級單元測試
二級學習
三級測試
//5級的後2級 (?<town>[^區]+?區|.+?鎮|.+?街道|.+?鄉)?(?<village>.*) //7級的後4級 (?<town>[^區]+區|.+?鎮|.+?街道|.+?鄉)?(?<village1>.+?街|.+?路|.+?巷)?(?<village2>[\d]+?號|[\d]+.?道)?(?<village3>.*)
耗時主要花在2部分1個是讀取數據耗時,這個基本沒得改,另外一個是輸入的地址和數據中的地址作匹配,儘可能優化匹配的效率。優化
1!李四,福建鼓樓13756899511鼓西街道湖濱路110號湖濱大廈一層. 1!張三,福州市閩13599622362侯縣上街鎮福州大學10#111. 1!劉湖,吉林省白山市六道江鎮西村藥店18694520738. 1!王五,騰衝市滿邑社區華園三小區47號18694520738. 1!鹹陡隱,江蘇省蘇州市吳江13184142847區平望鎮新業織造有限公司吳江區平望鎮雙浜村村民委員會. 2!王五,福建省福州市鼓樓18960221533區五一北路123號福州鼓樓醫院. 2!小美,北京市東15822153326城區交道口東大街1號北京市東城區人民法院. 2!王五,雲南省昭通市水富18694520738縣雲川路1號. 2!王五,雲南省迪慶藏族自治州18694520738香格里拉市. 2!王五,四川省眉山市仁壽18694520738縣黑龍灘鎮牌坊街. 2!王五,陝西省渭南市韓18694520738城市108國道附近. {"姓名":"李四","手機":"13756899511","地址":["福建省","","鼓樓區","鼓西街道","湖濱路110號湖濱大廈一層"]} {"姓名":"張三","手機":"13599622362","地址":["","福州市","閩侯縣","上街鎮","福州大學10#111"]} {"姓名":"劉湖","手機":"18694520738","地址":["吉林省","白山市","","六道江鎮","西村藥店"]} {"姓名":"王五","手機":"18694520738","地址":["","","騰衝市","滿邑社區","華園三小區47號"]} {"姓名":"鹹陡隱","手機":"13184142847","地址":["江蘇省","蘇州市","吳江區","平望鎮","新業織造有限公司吳江區平望鎮雙浜村村民委員會"]} {"姓名":"王五","手機":"18960221533","地址":["福建省","福州市","鼓樓區","","五一北路","123號","福州鼓樓醫院"]} {"姓名":"小美","手機":"15822153326","地址":["北京","北京市","東城區","","交道口東大街","1號","北京市東城區人民法院"]} {"姓名":"王五","手機":"18694520738","地址":["雲南省","昭通市","水富市","","雲川路","1號",""]} {"姓名":"王五","手機":"18694520738","地址":["雲南省","迪慶藏族自治州","香格里拉市","","","",""]} {"姓名":"王五","手機":"18694520738","地址":["四川省","眉山市","仁壽縣","黑龍灘鎮","牌坊街","",""]} {"姓名":"王五","手機":"18694520738","地址":["陝西省","渭南市","韓城市","","","108國道","附近"]}
測試覆蓋率