个人仓库
刚开始对地址的比较,用到的数据是全都放在一起的,搜索市的时候会导致很多重复搜索,导致搜索的效率比较底下。经过改进,将代码改成了二级地址的匹配方式。 JProfiler生成的性能分析图如下:
使用了JUnit对代码进行单元测试,主要是测试各个函数能否正常运行,设置了几组测试样例,测试程序对各种情况的处理。 测试数据主要有:
缺少省和市的地级市和县级市同时存在的还有其他地址关键词冲突的测试代码如下:
import static org.junit.Assert.*; import org.junit.Test; public class UnitTest { @Test public void testAddrFill_1() { String original="深圳";//市缺失,只比较前两个字 String changed="深圳市"; assertEquals(AddressJudge.addrFill(original), changed); } @Test public void testAddrConvert_2() throws Exception { //省市缺失 String original="1!张三,福建福州闽13599622362侯县上街镇福州大学10#111."; String changed="{\"姓名\":\"张三\",\"手机\":\"13599622362\", \"地址\":[\"福建省\",\"福州市\",\"闽侯县\",\"上街镇\",\"福州大学10#111\"]}"; assertEquals(AddressBasic.addrConvert(original), changed); } @Test public void testAddrConvert_3() throws Exception { //地级市和县级市同时存在 String original="1!风清扬,福建省福州市福13599622362清市上迳镇小东林."; String changed="{\"姓名\":\"风清扬\",\"手机\":\"13599622362\", \"地址\":[\"福建省\",\"福州市\",\"福清市\",\"上迳镇\",\"小东林\"]}"; assertEquals(AddressBasic.addrConvert(original), changed); } @Test public void testAddrConvert_4() throws Exception { //直辖市+单级地址缺失 String original="3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院."; String changed="{\"姓名\":\"小美\",\"手机\":\"15822153326\",\"地址\":[\"北京\",\" 北京市\",\"东城区\",\"\",\"交道口东大街\",\"1号\",\"北京市东城区人民法院\"]}"; assertEquals(AddressBasic.addrConvert(original), changed); } @Test public void testAddrConvert_5() throws Exception { //省市缺失 String original="1!张三,福建福州闽13599622362侯县上街镇福州大学10#111."; String changed="{\"姓名\":\"张三\",\"手机\":\"13599622362\", \"地址\":[\"福建省\",\"福州市\",\"闽侯县\",\"上街镇\",\"福州大学10#111\"]}"; assertEquals(AddressBasic.addrConvert(original), changed); } @Test public void testAddrConvert_6() throws Exception { //地级市和县级市同时存在 String original="1!风清扬,福建省福州市福13599622362清市上迳镇小东林."; String changed="{\"姓名\":\"风清扬\",\"手机\":\"13599622362\", \"地址\":[\"福建省\",\"福州市\",\"福清市\",\"上迳镇\",\"小东林\"]}"; assertEquals(AddressBasic.addrConvert(original), changed); } @Test public void testAddrConvert_7() throws Exception { //自治区和区同时存在 String original="1!令狐冲,内蒙古自治区呼和13599622362浩特市新城区内蒙古工业大学."; String changed="{\"姓名\":\"令狐冲\",\"手机\":\"13599622362\", \"地址\":[\"内蒙古自治区\",\"呼和浩特市\",\"新城区\",\"\",\"内蒙古工业大学\"]}"; assertEquals(AddressBasic.addrConvert(original), changed); } }异常处理主要是设置在文件读写部分的, 代码如下:
try { fis = new FileInputStream("d:/1.txt"); isr = new InputStreamReader(fis, "UTF-8"); br = new BufferedReader(isr); fos = new FileOutputStream("d:/2.txt"); osw = new OutputStreamWriter(fos, "UTF-8"); bw = new BufferedWriter(osw); String line=br.readLine(); bw.write("["+AddressBasic.addrConvert(line)); while ((line = br.readLine()) != null) { bw.write(","); bw.newLine(); bw.write(AddressBasic.addrConvert(line)); } bw.write("]"); } catch (Exception ex) { ex.printStackTrace(); }转载于:https://www.cnblogs.com/mpzheng/p/11537760.html
