iT邦幫忙

2021 iThome 鐵人賽

DAY 16
2
Software Development

溫柔學姐的Kotlin補課/教學系列 第 16

尋找字串與她的小夥伴:正規式 String Regex Replace

「學姐,這麼多的函式妳都能背起來嗎?」詩憶強撐著困倦的眼皮。

「如果人腦這麼厲害,就不用電腦了呢,而且Kotlin每半年會推出新的版本唷。」唯心用輕快的聲線說出殘酷的事實。

詩憶馬上意識清醒了大半。「唔,那怎麼辦呀?」

「常用的函式還是要記著,其他的,請依賴IDE。」唯心在IDE打出小點後,該類別支援的函式清單就顯示了出來,隨著後續打出的字越多,函式清單也逐步因篩選而縮短。「所以才說工程師英文不能太差呢,至少要能猜出需要的函式會叫什麼名字。」

圖一

「也是呢,如果班代她當初就知道和加號代表的是plus函式,就可以查出數字不支援用plus連接字串。」詩憶喃喃地說。

「因為有字串可以連接數字的前例,再加上我們習慣加號在數學上的意義,所以就誤以為加號萬能了吧。最好還是記得用字串模板拼接變數比較好,模板裡的變數用錢字號開頭,大括號包住名稱,程式就會自動把變數轉成字串和其拼接。」

fun main() {
    var a = 1
    var b = 2
    println("${a}A${b}B")
}

「用.toString()函式轉換嗎?」詩憶猜測,她已經漸漸明白程式所做的事情都是有所依據的。

「對,因為字串的應用太廣了,因此所有的類別都會帶著這個.toString()函式,而字串類別也有許多便利的函式。」唯心突然欺身湊了過來,輕聲耳語,「聽過爬蟲程式吧,穿梭於網路的資料大海,為主人尋找特定條件的資訊。比如說主人需要網頁裡的所有圖片,她就將副檔名是圖片檔名的.jpg.pngjpeg.bmp.webp等的圖片連結都傳回去。」唯心說著就輕笑了起來,轉身回到原本的位置。「雖說從它人的網站搜集資訊不是少見的例子,但也不能讓人說學校鼓勵這麼做,是不是?」

詩憶偏過頭揉了揉發癢的耳朵。

唯心將講義翻到一頁停下來。「像這樣找尋特定詞語的規則多到甚至都規劃出一個領域——正規式搜尋Regular Expression,不只各家高階程式語言都有正規式相關的函式,連Microsoft Office的Word這種文件編輯器也支援用正規式的函式搜尋。因為真的是很方便,像電話或是電子郵件信箱這樣遵循規則的字串都可以利用正規式。比如說當需要將臺灣市話區碼的部分統一加上括號,就可以用取代功能搭配正規式。講義只列出一部份的規則,完整的版本可以到網站去看。」

https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

fun main() {
    //目標 (02)1234-5678
    //^0代表0開頭
    //[0-9]{1,3}代表數字只能一到三個,金門馬祖部分地區的區碼扣掉0還有三個數字。
    //$1是符合第一個括號條件的字串。
    println("02-1234-5678".replace("(^0[0-9]{1,3})(-)".toRegex(), "($1)"))
}

詩憶看著講義上琳瑯滿目的正規式規則,突然想到了一個問題。「我在IDE有看到搜尋和取代功能,函式重新命名也可以用這個功能嗎?」

唯心搖搖頭。「不,像是函式、類別、變數、參數等重要成員,用重新命名功能比較好,IDE還會幫助檢查是否已經存在相同名字。」

圖二


上一篇
程式進化論:一行表達式 Single-expression functions
下一篇
學校的白色咖啡屋(一):繼承的根基與擴展的自由 Inheritance Implement Any
系列文
溫柔學姐的Kotlin補課/教學31

尚未有邦友留言

立即登入留言