在前幾天的內容中,當我完成搜尋時,都會使用parseBoardArticle方法將目前畫面的內容傳入,今天主要就是看這個Method在做些什麼事。
private fun parseBoardArticle(result: String) {
val articleList = mutableListOf<Article>()
val articlePattern =
Pattern.compile("([●]|[ ])*(?<no>[0-9]+)[ ].([0-9 X]+|爆)(?<date>../..)[ ](?<author>.*?)([\\s□轉]|R:)+(?<title>.*)")
val rows = result.split("\n")
for (row in rows) {
val matcher = articlePattern.matcher(row)
if (matcher.find()) {
val article = Article(
matcher.group("no")?.trim(),
matcher.group("date")?.trim(),
matcher.group("author")?.trim(),
matcher.group("title")?.trim()
)
articleList.add(0, article)
Log.d(mTag, "article=$article")
}
}
articleAdapter.setData(articleList)
}
可以看到主要的分析方式是使用Pattern。
解析出來後便是將需要的內容存至data class Article。
data class Article(
val number: String?,
val date: String?,
val author: String?,
val title: String?
)
並加入至articleList中,由於我希望將比較新的文章放在RecyclerView的第一項,因此add時固定加入到首位。articleAdapter則是該RecyclerView的Adapter,預計明天應該會看一下裡面的內容跟處理新增資料的功能。
另外在移除搜尋項目過程呼叫refreshSearch時,若searchTitleSet和searchAuthorSet都無內容,則將articleAdapter的列表清空。
//...
if (searchTitleSet.isEmpty() && searchAuthorSet.isEmpty()) {
articleAdapter.setData(listOf())
return@withContext
}
//...