第一次个人编程作业

孤者浪人 提交于 2020-04-01 08:46:41

Github项目地址

 

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
· Planning · 计划  20  15
· Estimate · 估计这个任务需要多少时间  600  1605
· Development · 开发  60  240
· Analysis · 需求分析 (包括学习新技术)  180 900
· Design Spec · 生成设计文档  20  20
· Design Review · 设计复审  10  15
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)  10  10
· Design · 具体设计  10  15
· Coding · 具体编码  30  120
· Code Review · 代码复审  10  10
· Test · 测试(自我测试,修改代码,提交修改)  30  60
· Reporting Standard · 报告  60  120
· Test Repor · 测试报告  20  30
· Size Measurement · 计算工作量  10  20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划  20  30
·  · 合计  600  1605

 

解题思路

  1.首先分割电话号码,把电话号码提取出来。

  2.分别分割姓名,地址。

  3.将地址进行省市区等详细的划分。

  4.将地址进一步区分道路,门牌号,详细地址。

  ~使用java的正则表达式来解析地址。

     参考内容:https://blog.csdn.net/superSubfn/article/details/80290491

实现过程

类名 功能
FileIO 文件输入输出
Trim 处理信息

 

函数名 功能
void trimName() 分割姓名
void trimDegree() 分割等级
void trimPhoneNumber() 分割电话号码
void trimAddress() 分割地址(省市区)
void trimDetail() 分割详细地址

 

关键代码 

   利用正则表达式的规则来进行地址解析 

    String regex="(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)";

  相对于参考的博客,加入了划分道路,门牌号,详细地址的功能。

    String regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)?(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县|.*?直辖市)?(?<county>[^县]+县|.+?区|.+县级市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇|.+街|.+乡)?(?<road>[^路]+街|.*?巷|.*?路)?(?<num>[^号]+门牌号|.*?号)?(?<village>.*)";

   加入了解决直辖市问题的功能

try {
if (province != null && province.charAt(province.length() - 1) == '市') {  city = province;
  province = province.replace("市", "");
     }
}
catch (Exception e){
      e.printStackTrace();
 } 

性能分析

 

单元测试

输入参数:
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.1!张三,福建省福州市闽13599622362侯县上街镇福州大学10#111.2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
控制台输出结果:

{"姓名":李四,"手机":13756899511,"地址":["福建省","福州市","鼓楼区","鼓西街","道湖滨路","110号","湖滨大厦一层"]}
{"姓名":张三,"手机":13599622362,"地址":["福建省","福州市","闽侯县","上街镇","福州大学10#111"]}
{"姓名":王五,"手机":18960221533,"地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]}
{"姓名":小陈,"手机":13965231525,"地址":["广东省","东莞市","","凤岗镇","凤平路13号"]}

 

 

异常处理

//文件输入异常
FileNotFindException:
public static void main(String[] args) throws IOException 


//province可能为空
NullPointerException:try {
      if (province != null && province.charAt(province.length() - 1) == '市') {
         ity = province;
          province = province.replace("市", "");
 }
}
catch (Exception e) {
  e.printStackTrace();
 }

 

 

 

问题

  1.无法解决直辖市的省市区分割。

  2.对于详细地址中带有省市区的分割不能正确处理。

  3.无法解决没有带"省市区"等关键字的地址的分割。

  4.无法对缺少的地址信息进行补全。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!