可控性
//1:第一种情况,默认不能随意给空值
Var name:String=“zhangsan”
Name =null//会报异常
Var name2:String?=“zhangsan”`
name2=null
name2=“json”//可为空,name2用问号(?)修饰
//2:第二种 安全调用
var name :String=“json”
name=null
//可为空的name,使用可能为空的name,需要给出补救措施
name?.capitalize()//如果为空,问号后面不执行,不会引发空指针异常
使用let安全调用
var name :String?=null
name?let{//如果let为空,let方法提不执行,不会引发空指针
//如果执行到这里,it肯定不会null
if(it.isBank()){//如果那么是空值“”没有内容
“default”
}else{
it
}
}
:非空断言操作符
var name :String?=null
name!!.capitalize()// 不管问号是不是null,后面都执行,如果为空容易引发空指针
if判断null的情况(和java一样)
var name :String?=null
if(name!=null){
//执行
}else{
//name is null
}
kotlin 空合并操作符
var name :String?=“李小龙”
name=null
//如果name是空 执行?:后面的条件
Toast(name?:”这是一个null”)
//let+空合并
Toast(name?let{”${it}”)?:”这是一个null")
kotlin异常处理 和自定义异常
try{
var name:String?=null
checkException(name)
}catch(e:Exception){
println(e)
}
fun. checkException(name:String?){
Name?: throw myException()
}
class myException :IllegaArgumentException(“我自己的异常”)
//官方异常
checkNull(name)
requireNotNull(name)
kotlin中。subString使用
cons val INFO =“json, is, me”
INFO.subString(0,3)
//split分割操作
val list=INFO.split(“,”)
//解构. c++语言语法
val(v1,v2,v3)=list
println(“v1${v1}v2${v2}v3${v3}”)
//也可以直接输出list
println(${list})
replace 加密解码操作
val pas=“ASSDDSDFDFDGHGHJHJH”
println("原始密码是${pas}”)
//加密操作,把字符替换为数字,就是加密了,正则AH如果是AH就会加密
pas.repalce(Regex(“[AH]")){
//直接写it.value. 就是真么也没处理
when(it.value){//每一个字符,加密处理,只是根据条件 替换字符
“A”->”9”
“H”->”5”
else-> it.value
}
}
//解密操作
pas.repalce(Regex(“[95]")){
//直接写it.value. 就是真么也没处理
when(it.value){//每一个字符,加密处理,只是根据条件 替换字符
“9”->”A”
“5”->”H”
else-> it.value
}
}
kotlin == 和 ===
//==值比较 相当于java的equals
// ===引用比较
val name =“aaaabbb”
val name2 =“aaaabbb”
name==name2和 name.quals(name2)。等同
name ===name 也是true
字符串遍历
val str=“ABCDEFG”
str.firEach{
println(it)
}
安全转换函数
val number=“666”.toInt()//没问题
val number=“666.6”.toInt()//会报错,字符串是double不能转int
//安全转换,错了返回空
Val number:Int?=“65.6”.toIntOrNull()
//double 转int
666.3434343.toInt()
==666 //四舍五入
666.53333.roundToInt()
==667
val r=“%3f”.format(65.345)//保留三位小数
apply内置函数
val info =“json is dog”
//普通函数
println(“长度是${info.length}”)
println(“最后一个字符${info[info.length-1]}”)
println(“转小写${info.toLowerCase()}")
//apply内置函数
Info.apply{
//一般匿名函数都会持有it,但是apply函数不会持有it,却会持有this,this=info本身
println(“长度是${length}”)
println(“最后一个字符${[length-1]}”)
println(“转小写${oLowerCase()}")
}
//链式
info.apply{
//字符串处理逻辑1
}.apply{
//字符串处理逻辑2
}.apply{
//字符串处理逻辑3
}