Kotlin编程基础

字符串

查找

fun main() {
    var str="Hello World"
    println(str.first())            //获取第1个元素:H
    println(str.last())             //获取最后1个元素:d
    println(str.get(4))             //获取第5个元素:o
    println(str[4])                 //获取第5个元素:o
    println(str.indexOf('o'))       //查找字符串在原字符串中第1次出现的角标:4
    println(str.lastIndexOf('o'))   //查找字符串在原字符串中最后1次出现的角标:7
}

截取

subString()与subSequence()的区别在于,后者的返回值是CharSequence

fun main() {
    var str = "Hello World!"
    println(str.substring(3))                   //截取角标为3,到角标结束的字符
    println(str.substring(3, 7))                //截取角标为3,到角标为6的字符
    println(str.substring(IntRange(3, 7)))      //截取角标为3,到角标为7的字符
    println(str.subSequence(3, 7))              //截取角标为3,到角标为6的字符
    println(str.substring(IntRange(3, 7)))      //截取角标为3,到角标为7的字符
}
运行结果

替换

fun main() {
    var str = "Hello World! Hello World!"
    println(str.replace("World", "Kotlin"))
    println(str.replaceFirst("World", "Kotlin"))
    println(str.replaceBefore("!", "Kotlin"))
    println(str.replaceAfter("Hello ", "Kotlin!"))
}
运行结果

 分隔

Kotlin的split()函数可传入多个分隔符。

fun main() {
    var str = "hello.kotlin/world"
    var split = str.split(".", "/")
    println(split)
}
运行结果

去空格

trim()用于删除字符串前面的空格、trimEnd()用于删除后面的字符。

fun main() {
    var str = "         Hello World!         "
    println(str.trim())
    println(str.trimEnd())
}
运行结果

字符串字面值

转义字符串

采用传统的反斜杠“ \ ”方式对字符进行转义,常见的转义字符有:

\r:回车符,将光标定位到当前行的开头,不会跳到下一行

\n:换行符,跳到下一行开头

\t:制表符,将光标定位到下一个制表符的位置,类似文档中的Tab

\b:退格符号,类似键盘上的BackSpace

\':单引号字符,Kotlin中,单引号表示字符的开始与结束,直接写会报错

\":双引号字符,Kotlin中,双引号表示字符串的开始与结束,直接写会报错

\\:反斜杠字符,单独一个斜杠是转义字符

原生字符串

使用三对引号(""" """)把所有字符括起来,可以保证原有字符的输出,即使有转义符号也不会被转义。

fun main() {
    //转义字符串
    val str1 = "您\n好"
    println(str1)
    //原生字符串
    val str2 = """您  \n  好"""
    println(str2)
}
运行结果

类型转换

类型检查

可使用is操作符或!is反向操作符提前检测,返回值为Boolean。

var a:Any = "hello"
var result1 = a is String
var result2 = a !is String

定义变量a时使用的是Any类型,相当于java的Object类型,表示任意类型。

智能类型转换

fun main() {
    var a: Any = "hello"
    if (a is String) {
        println(a.length)//a自动转换为String类型,可以使用length
    }
}

Any类型的好处在于,通过is操作符进行判断时,当判断成功,会自动将其转换为相应的类型。 

强制类型转换

as操作符 
fun main() {
    var a1 = "1"
    var b1: String = a1 as String
    println(b1.length)

    var a2 = 1
    var b2: String = a2 as String
    println(b2.length)
}
运行结果

后半段代码在编译器中不会报错,但在运行时会。可见在Kotlin中,Integer类型的变量不能用as操作符转换成String。 

as?操作符 

由上可知,使用as操作符转换时,运行时可能会抛出异常。为了避免,此时应使用安全转换操作符。若转换失败,则是返回null,不会抛出异常。

fun main() {
    var a = 1
    var b: String? = a as? String
    println(b?.length)//运行结果:null
}

在声明b变量时,使用的是" String? ",意为声明了一个可以为空的变量b。 

空值处理

开发过程中,经常会遇到空指针异常的问题,如果处理不当,极大概率会出现报错,进而引起程序崩溃。在Kotlin中,为了处理空指针问题,引入了Null机制。

可空类型变量(?)

Kotlin中可将变量分为两种变量:可空类型的与非空类型的变量。一般情况下,变量默认非空。

想要定义某个变量为可空变量时,声明时在数据类型后添加 “?” 来标识。

var name: String  //非空
var age: Int?     //可空

如上,给变量name赋值null会引起报错,因为当变量为非空变量时,不能被赋值为null,反之变量age则无此问题。

但在使用可空变量时,需要给其赋初始值,至少得是个null,否则同样会报错。

var name: String = "Tom"  //改进后的非空
var age: Int? = null      //改进后的可空

安全调用符(?.) 

此符号专门用于判断变量是否为空,是语句: if( 变量 != null ) 的替代品。

//引入安全调用符之前
fun main(){
    var name: String = "Tom"  
    var age: Int? = null
    if(telephone != null){
        print(telephone.length)
    } else {
        telephone = "18800008888"
        print("telephone =" + telephone)
    }    
}
  
//引入安全调用符之后
fun main(){
    var name: String = "Tom"  
    var age: Int? = null
    var result = telephone?.length
    print(result)   
}

 运行引入安全调用符后的代码,结果为null,可见当前变量为空时,编译也不会报错,而是返回一个null值。

Elvis操作符(?: )

使用可变变量时,当当前变量为空,会返回一个null值,若我们不想要为空时返回null值,而是返回一个默认值,可使用Elvis操作符。

fun main(){
    var name: String = "Tom"  
    var age: Int? = null
    var result = telephone?.length ?: "18800008888"
    print(result)   
}

此时运行结果为18800008888,这是Elvis操作符给可空变量赋予的默认值,有了这个之后,可空变量不再是简单的null。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值