Kotlin入門(5)字元串及其格式化
上一篇文章介紹了數組的聲明和操作,包括字元串數組的用法。注意到Kotlin的字元串類也叫String,那麼String在Java和Kotlin中的用法有哪些差異呢?這便是本文所要闡述的內容了。
首先要說明的是String類型與基本變數類型之間的轉換方式,在《Kotlin入門(3)基本變數類型的用法》中,提到基本變數類型可以通過toString方法轉為字元串類型。反過來,字元串類型又該如何轉為基本變數類型?如果使用Java編碼,有以下幾種轉換方式:
字元串轉整型:調用方法Integer.parseInt(***)
字元串轉長整型:調用方法Long.parseLong(***)
字元串轉浮點數:調用方法Float.parseFloat(***)
字元串轉雙精度數:調用方法Double.parseDouble(***)
字元串轉布爾型:調用方法Boolean.parseBoolean(***)
字元串轉字元數組:調用String對象的toCharArray方法
就上面的轉換情況來看,Java的實現方式比較繁瑣,既需要其它類型的類名,有需要其它類型的轉換方法。而在Kotlin這邊,轉換類型相對簡單,並且與基本變數類型之間的轉換保持一致,具體說明如下:
字元串轉整型:調用String對象的toInt方法
字元串轉長整型:調用String對象的toLong方法
字元串轉浮點數:調用String對象的toFloat方法
字元串轉雙精度數:調用String對象的toDouble方法
字元串轉布爾型:調用String對象的toBoolean方法
字元串轉字元數組:調用String對象的toCharArray方法
顯而易見,Kotlin對字元串的類型轉換更友好,也更方便記憶。
當然,轉換類型只是字元串的基本用法,還有更多處理字元串的其他用法,比如查找子串、替換子串、截取指定位置的子串、按特定字元分隔子串等等,在這方面Kotlin基本兼容Java的相關方法。對於查找子串的操作,二者都調用indexOf方法;對於截取指定位置子串的操作,二者都調用substring方法;對於替換子串的操作,二者都調用replace方法;對於按特定字元分隔子串的操作,二者都調用split方法。
下面是Kotlin使用indexOf和substring方法的代碼例子:
var origin_trim:String = origin
if (origin_trim.indexOf( . ) > 0) {
origin_trim = origin_trim.substring(0, origin_trim.indexOf( . ))
}
在這些字元串處理方法裡面,唯一的區別是split方法的返回值,在Java中,split方法返回的是String數組,即String[];但在Kotlin中,split方法返回的是String隊列,即List。下面是Kotlin使用split方法的示例代碼:
btn_split.setOnClickListener {
var strList:List = origin.split(".")
var strResult:String = ""
for (item in strList) {
strResult = strResult + item + ", "
}
tv_convert.text = strResult
}
若想獲取字元串某個位置的字元,這個看似簡單的需求,但Java實現之時卻有點繁瑣,只能調用substring方法去截取指定位置的字元串,如下所示:
String result = origin.substring(number, number+1);
tv_convert.setText(result);
現在使用Kotlin實現上述需求,就簡單多了,因為Kotlin允許直接通過下標訪問指定位置的字元,代碼如下:
tv_convert.text = origin[number].toString()
同時,Kotlin也支持字元串通過get方法獲取指定位置上的字元,代碼如下:
tv_convert.text = origin.get(number).toString()
如此一來,Kotlin的代碼不但更加精鍊,而且可讀性也增強了。
Kotlin對字元串帶來的便利並不限於此,大家知道,Java如果要把幾個變數拼接成字元串,要麼用加號強行拼接,要麼用String.format函數進行格式化。可是前者的拼接加號,時常會跟數值相加的加號混淆;而後者的格式化,還得開發者死記硬背諸如%d、%f、%s、%c、%b等等格式轉換符,實在令人頭痛。對於格式化這個痛點,Kotlin恰如其分地進行了優化,何必引入這些麻煩的格式轉換符呢?直接在字元串中塞進「$變數名」表示此處引用該變數的值,豈不妙哉!
心動不如行動,趕緊動起手來,看看Kotlin如何格式化字元串,代碼如下所示:
btn_format.setOnClickListener { tv_convert.text = "字元串值為 $origin" }
這裡要注意,符號$後面跟變數名,系統會自動匹配最長的變數名。比如下面這行代碼,列印出來的是變數origin_trim的值,而不是origin的值:
btn_format.setOnClickListener { tv_convert.text = "字元串值為 $origin_trim" }
另外,有可能變數會先進行運算,再把運算結果拼接到字元串中。此時,則需用大括弧把運算表達式給括起來,具體代碼如下:
btn_length.setOnClickListener { tv_convert.text = "字元串長度為 $" }
注意到在Kotlin中,美元符號$屬於特殊字元,因此不能直接列印它,必須經過轉義才可列印。轉義的辦法是使用「${ *** }」表達式,該表達式外層的「${ }」為轉義聲明,內層的「***」為需要原樣輸出的字元串,所以通過表達式「${ $ }」即可列印一個美元符號,示例代碼如下所示:
btn_dollar.setOnClickListener { tv_convert.text = "美元金額為 ${ $ }$origin" }
如果只是對單個美元符號做轉義,也可直接在符號$前面加個反斜桿,即「$」,代碼如下:
btn_dollar.setOnClickListener { tv_convert.text = "美元金額為 $$origin" }
不過一個反斜桿僅僅對一個字元進行轉義,如果要對一個字元串做轉義,也就是把某個字元串的所有字元原樣輸出,那麼只能採用形如「${ *** }」的表達式了,該表達式用單引號把待轉義的字元串包起來,好處是能夠保留該字元串中的所有特殊字元。
下面來個Kotlin處理字元串的效果動圖:
GIF/1K
持續更新,關注「老歐說安卓」,老歐和你一起探索移動互聯網的技術體系,認真寫作,用心學習。保留所有版權。
※熱修復之 Method Hook 原理分析
※我們的相遇都是一場不期而遇
※煙江石燕︱麓山聽楓:詠洪災後重建並祝福
※杭城烤雞NO.1——吳山烤雞
TAG:公眾號 |
※Kotlin:數組、字元串模板
※Spring Boot與Kotlin使用Spring-data-jpa簡化數據訪問層
※Canonical宣布Kotlin編程語言Snap包格式上線
※Kotlin項目下的Retrofit2網路請求框架
※Kotlin和Swift語言在Redmonk榜上排名大幅提升
※Kotlin 泛型
※Kotlin Android 環境搭建
※Spring Boot與Kotlin 使用MongoDB資料庫
※Gradle Kotlin DSL的accessors 生成問題
※Kotlin打造Android路由框架
※Kotlin 條件控制
※Kotlin 類和對象
※Kotlin語言Web庫又添一虎將:Kweb
※Kotlin 語言獲Linux通行證
※Kotlin技術分享-異常
※Kotlin 循環控制
※Kotlin 基本數據類型
※Kotlin 編程
※Kotlin 基礎語法
※Kotlin基本語法