第一次個人編程作業:我的分數我做主
博客班級 | 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。