第一次个人编程作业:我的分数我做主 (9.10更新截取数据的思路)
第一次个人编程作业:我的分数我做主
博客班级 | https://edu.cnblogs.com/campus/fzzcxy/2018SE1 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/11110 |
作业目标 | <[初步使用Git进行源代码管理] [尝试PSP开发流程] [记录整个过程并写总结]> |
作业源代码 | https://gitee.com/wang-bingwei/personal |
学号 | <211806342> |
1.记录自己的代码行数,需求分析时间,编码时间
预估时间(小时) | 实际时间(小时) | |
---|---|---|
计划 | ||
需求分析 | 0.5 | 0.5 |
具体设计 | 0.5 | 2 |
开发 | ||
编码 | 1 | 6 |
测试 | 0.5 | 0.5 |
记录与总结 | 2 | 3 |
合计花费时间 | 4.5 | 12 |
2.分解需求的思路
- small.html和all.html作为参数传入Score
- 使用Jsoup分别截取经验值,并在截取的同时累计
- 按比例计算输出
3.记录不会的知识的学习过程、记录修改优化的过程
-
如何记录和总结?
Typora记录过程和总结,后使用Atom进行排版预览,最后发表博客
-
如何用Atom进行预览?
打开Atom编辑器
快捷键Ctrl+Shift+P,打开命令输入页面
输入 markdown preview toggle
实现左边编辑右边预览 -
准备工作:
- Git的操作
- Markdown的使用
- Java命名规范和代码格式
-
如何导入和读取配置文件?
-
如何解析HTML文件?
https://www.cnblogs.com/youyoui/p/11065923.html
-
如何使用Jsoup?
https://blog.csdn.net/zhangboy1234/article/details/38893955
https://www.open-open.com/jsoup/
https://developer.ibm.com/zh/articles/j-lo-jsouphtml/
(此链接由张同学提供,感觉写的特别好故贴出)https://www.jb51.net/article/140545.htm
-
如何导入jar包?
以下为9.10更新部分
-
在Webstorm中打开html文件和格式混乱,如何对齐代码?
-
centOS 下 webstorm 格式化代码的快捷键:
Ctrl + Shift + i
-
windows 下 webstorm 格式化代码的快键键
Ctrl + Alt + i
-
mac 下 webstorm 格式化代码的快捷键
Option + Command + i
-
-
jsoup用法--从元素抽取属性,文本和HTML
在解析获得一个Document实例对象,并查找到一些元素之后要得在这些元素中的数据
方法:
要取得一个属性的值,可以使用Node.attr(String key) 方法
对于一个元素中的文本,可以使用Element.text()方法
对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或 Node.outerHtml()方法
示例:String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>"; Document doc = Jsoup.parse(html);//解析HTML字符串返回一个Document实现 Element link = doc.select("a").first();//查找第一个a元素 String text = doc.body().text(); // "An example link"//取得字符串中的文本
10. 截取特定数据的思路
首先在webstorm中打开small.html,一键格式化代码,并分析;
通过观察可以得出要判断的三个信息都在 class="interaction-row" 的div内;
-
我们要判断三个关键信息是:
- 题目类型
- 是否参加
- 经验值得分
- 经过简化的目标区域(删除部分信息):
<div class="interaction-row" data-appraise-type="TEACHER"> //i
<img>
<div> //i.1 即 child(1)
<div> //i.1.1 child(1).child(0)
<span>已结束</span>
<span>2020-04-17编程题:数据访问类</span>
</div>
<div> //i.1.2 即child(1).child(1)
</div>
<div> //i.1.3 即child(1).child(2)
<div> //i.1.3.1 即child(1).child(2).child(0)
<span>共 </span>
<span>5</span>
<span>人参与</span>
<span style="margin:0 5px;">|</span>
<span>2020-04-17</span>
<span style="margin:0 5px;">|</span>
<!-- 经验值 START -->
<!-- 已参与 -->
<!-- 被评价得分 -->
<span style="color:#EC6941;">13 经验</span> // 即child(1).child(2).child(0).select("span").get(6)
<!-- 含有互评份额 -->
<!-- 经验值 END -->
<!-- 剩余时间 -->
</div>
<div class="clear"> //i.1.3.2
</div>
</div>
</div>
</div>
-
由此判断要截取的三个关键信息的所处位置是:
-
题目类型:在i.1.1 的第二个span内
-
是否参加:在i.1.3.1内
-
注:此处调用.toString().contains("已参与")即可判断是否参加活动
-
经验值得分:在i.1.3.1的第七个span内
-
有了具体的位置信息就可以开始截取需要的信息了
- jsoup三个好用的方法:
.child(i); //查找第i个子元素
.get(i); //查找第i+1个元素
.select("div[class=interaction-row]"); //查找特定元素
- 以单个div为例验证截取结果是否正确:
9.9 代码行数:125行(含注释)
9.10 代码行数:156行(含注释)
9.9 总结:一开始一直在原地打转浪费了不少时间:在如何截取字符的方案上犹豫不决,直到参考其他同学的作业后发现采用Jsoup竟如此简单代码效率如此之高,才确定下方案(之前受限于水平,用Jsoup一直达不到目的,困扰了一晚上直到看到别人的代码才茅塞顿开,在此由衷感谢陈同学们和谢同学!)。由此反思,自己的能力水平不堪入目,且写出的代码不够简练,在实现相同目的的方式上也更繁琐。接下来的时间需要更多地复习和练习上学期学的java高级开发课程内容,要尽快弥补上自己的缺点,更熟练地使用java。