因為前段時間做了個安卓的小說下載器回梧,不過是jsoup匹配的盟广,我后面也想了一下正則實現(xiàn)通用的匹配模式闷串,一個網(wǎng)站一套規(guī)則感覺比較繁瑣,不好維護筋量。
實現(xiàn)方式我錢前面也說過了烹吵,所以吧碉熄,開始動手弄個界面出來,正則嘛年叮,匹配注定不會很完善具被,所以需要過濾。
主要思路是通過章節(jié)目錄來下載一本小說只损。章節(jié)目錄解析下來每一章的正文目錄鏈接一姿,再通過正文鏈接來抓取源碼來匹配正文內容。
下面是實現(xiàn)的效果圖
主頁面
閱讀頁面
開始本來是沒打算添加閱讀功能的畢竟在電腦看小說的人很少吧跃惫,后面在論壇里面有人提議加個閱讀叮叹,想了一下在pc上看小說的軟件我還沒聽過,幾乎都是網(wǎng)頁看小說爆存,但是網(wǎng)頁廣告比較多蛉顽,我做個閱讀器出來相當去去廣告的吧,也行先较,就添加了進去
接下來說說實現(xiàn)原理了
前面說了內容解析的原理携冤,來說說內部的構造吧
1.章節(jié)目錄去重復鏈接
通過布隆過濾器算法實現(xiàn)的url去重</li>
2.亂序重排
因為有些網(wǎng)站的章節(jié)目錄有些是亂的,照著下載下來也是亂的闲勺,得排序一下曾棕,首先截取url最后一段內容,dddd.html之類的菜循,把dddd提取出來翘地。
開始我有兩種排序方式,一個是字符串比較排序癌幕,發(fā)現(xiàn)并不是很好衙耕,因為排CompareTo方法比較原理問題可以自行看看他的原理,后面用了bigInteger來比較數(shù)值的大小勺远,比較準確了橙喘,對于那些是字符串結尾的網(wǎng)站就沒進行排序的,比如起點的結尾是一串亂七八糟的字符穿胶逢,根本排不了厅瞎,好在他的順序是正確的</li>
3.字符轉碼
因為有些網(wǎng)站用的一些繁體字,查看源碼的時候中文就是一些&#dddd;格式的(NCR)字符宪塔,所以必須得轉一下碼才行,轉碼方式也簡單,其實這個也不需要什么轉碼囊拜,這個把其中的數(shù)字取出來某筐,當成ASCLL碼,取值就行了(int強轉成char)
4.繁體轉簡體
繁體字我是看著不舒服冠跷,所以就加了上去南誊,big5轉對應的編碼就行身诺,也可以用chinese-utils包下面的toSimple方法
UI方面就沒怎么做得好看了,就把用的到的功能加上去了
1.實現(xiàn)了歷史章節(jié)讀取抄囚,自動跳轉上次位置
2.自動保存上次設置背景色霉赡,字體大小。
3.滾動條下拉到底自動加載下一章節(jié)幔托,到頂反之
4.章節(jié)自動緩存功能穴亏,實現(xiàn)無延遲閱讀