1.if-else語句
基本用法和c語言一樣,但如果每個分支內部只有一個字符串返回值,此時可以去掉大括號。示例:
if (isTrue==true) "真" else "假"
2.多路分支when/else
與switch/case的區別:
<1>關鍵字switch被when取代;
<2>判斷語句“case 常量值:”被新語句“常量值 ->”取代;
<3>取消break,關鍵字default被else取代。
when (count) {
0 -> tv_answer.text = "000000000"
1 -> tv_answer.text = "111111111"
else -> tv_answer.text = "-1"
}
//允許有返回值
tv_answer.text = when (count) {
0 -> "000000000"
1 -> "111111111"
else -> "-1"
}
//允許接收變量
var zero:Int = 0
var one:Int = 1
tv_answer.text = when (count) {
odd -> "000000000"
even -> "111111111"
else -> "-1"
}
此外,多個常量值共用一個分支時,並排在一起並用逗號隔開即可。如果幾個常量值剛好是連續數字,可以使用“in 開始值..結束值”指定區間範圍,如果不在某個區間範圍,則使用語句“!in 開始值..結束”。
tv_answer.text = when (count) {
1,3,5,7,9 -> "涼風有信的謎底是"諷""
in 13..19 -> "秋月無邊的謎底"二""
!in 6..10 -> "當裏的當,少俠你來猜猜"
else -> "這是一首好詩"
}
3.類型判斷
關鍵字instanceof被is取代,下面是類型判斷的Kotlin代碼格式:
if (str is String){...}
同時多路分支的when/else也支持類型判斷,只不過在分支判斷時採取“is 變量類型 ->”這種形式。
示例:
tv_answer.text = when (countType) {
is Long -> "此恨綿綿無絕期"
is Double -> "樹上的鳥兒成雙對"
else -> "門泊東吳萬里船"
}
4.循環處理
4.1for-in循環
採用“for(item in list)”形式進行循環操作
var poem =""
for (item in poemArray) {
poem = "$poem$item,\n"
}
數組循環採用““for (i in 數組變量.indices)”語句,其中indices表示該數組變量的下標數組,示例:
var poem:String=""
//indices表示數組變量對應的下標數組
for (i in poemArray.indices) {
if (i%2 == 0) {
poem = "$poem${poemArray[i]},\n"
} else {
poem = "$poem${poemArray[i]}。\n"
}
}
tv_poem_content.text = poem
其他for循環形式:
// 左閉右開區間,合法值包括11,但不包括66
for (i in 11 until 66) { ... }
// 每次默認值遞增1,這裏改爲每次遞增4
for (i in 23..89 step 4) { ... }
// for循環默認遞增,這裏改爲默認遞減
for (i in 50 downTo 7) { ... }
4.2條件循環
while循環和Java一樣
//while循環
while (i < poemArray.size) {
if (i%2 ==0) {
poem = "$poem${poemArray[i]},\n"
} else {
poem = "$poem${poemArray[i]}。\n"
}
i++
}
//do while循環
do {
if (i%2 ==0) {
poem = "$poem${poemArray[i]},\n"
} else {
poem = "$poem${poemArray[i]}。\n"
}
i++
} while (i < poemArray.size)
4.3跳出多重循環
continue和break都保留Java的用法,但Kotlin還可以跳出多重循環。跳出外層循環需要加個@標誌。示例:
//給外層循環加個outside的標誌
outside@ while (i < poemArray.size) {
var j:Int = 0
var item = poemArray[i];
while ( j < item.length) {
if (item[j] == '') {
is_found = true
//直接跳出outside循環
break@outside
}
}
j++
}
5.空安全
Kotlin 校驗字符串空值的幾個方法
<1>isNullOrEmpty:空指針或者字符串長度爲0時返回true,非空串與可空串均可調用;
<2>isNullOrBlank:空指針或字符串長度爲0或全爲空格時返回true,非空串與可空串均可調用;
<3>isEmpty:字符長度爲0時返回true,只有非空串可調用;
<4>isBlank:字符長度爲0或者全爲空格時返回true,只有非空串可調用;
<5>isNotEmpty:字符串長度不爲0時返回true,只有非空串可調用;
<6>isNotBlank:字符串長度不爲0且不是全空格串時返回true,只有非空串可調用。
5.1聲明可空變量
聲明一個可空字符串
var strCanNull:String?//可空字符串需要進行非空判斷,否則編譯器會提示代碼錯誤
var strNotNull:String//該變量值不能爲null,否則編譯器會提示代碼錯誤
5.2檢驗空值的運算符
示例加用法說明:
var length_null:Int?
val strB:String? = null
btn_question_dot.setOnClickListener {
//?.表示變量爲空時直接返回null,所以返回值的變量必須被聲明爲可空類型
length_null = strB?.length
tv_check_result.text = "使用?.得到字符串B長度爲$length_null"
}
btn_question_colon.setOnClickListener {
//?:表示爲空時返回右邊的值,即(x!=null)?x.**:y
length = strB?.length?: -1
tv_check_result.text = "使用?:得到字符串B的長度爲$length"
}
btn_exclamation_two.setOnClickListener {
strB = "排雷完畢"
//!!.強行把strB變量從可空類型轉換爲非空類型,從而避免非空檢驗
length = strB!!.length
tv_check_result.text = "使用!!得到字符串B的長度爲$length"
}
btn_exclamation_two.setOnClickListener {
//!!.表示不做非空判斷,強行執行後面的表達式,如果變量爲空,就拋出異常
//只有確保非空時,才能使用!!,不然使用要catch異常
try {
length = strB!!.length
tv_check_result.text = "使用!!得到字符串B的長度爲$length"
}catch(e:Exception) {
tv_check_result.text = "發現空指針"
}
}
6.等式判斷
6.1比較兩個字符串相等用“==”,同理,兩個字符串不等用“!=”
6.2引用相等---除了值相等外,還要求引用的地址也相等
判斷引用相等用“===”表示,同理,不等用“!==”表示
6.3 s和in
運算符is和!is---是否爲某種類型
val oneLong:Long = 1L
val result = oneLong is Long//result結果是布爾值
運算符in和!in---判斷數組是否存在等值元素
val oneArray:IntArray = intArrayOf(1, 2, 3, 4, 5)
val four:Int = 4
val result = four in oneArray//result值爲布爾值