Kotlin的第二部分将专门对字符串和异常处理做一个介绍
1. 字符串
1.1 创建
1.2 字符串模板
1.3 行字符串
1.4 常用函数
2. 异常处理
2.1 try catch finally
2.1 throw,throws
创建字符串的形式有两种,第一种是让系统自动识别为字符串类型,第二种是直接调用String类的构造函数
var input = "这是一个字符串"
var chars = charArrayOf('h', 'e', 'l', 'l', 'o');
var dyInput: String = String(chars);
println("自动获得变量类型,$input");
println("指定对象类型类型,$dyInput");
第1行,以双引号的形式指明input为字符串类型
第3行,调用String类的构造函数完成String对象dyInput的创建,其函数在StringsJVM.KT文件中
"这是字符串$input"
var input = "这是一个字符串"
var inputTemplate = "这是字符串模板$input"
println("这是字符串模板,$inputTemplate");
行字符串使用三个引号来使得字符串保留其基本格式
val text1 ="""
hello
world
hello world
"""
println("行字符串,$text1");
// 输出的字符和格式都和原来的保持一致
函数名 | 作用 |
plus(other: Any?) | 字符串拼接,类似于java中的+ |
get(index: Int) | 获取指定下标的字符 |
subSequence(startIndex: Int, endIndex: Int) | 字符串截取 |
compareTo(other: String) | compareTo函数按字典顺序比较两个字符串。如果当前字符串等于参数字符串,则返回0;如果当前字符串位于参数字符串之前,则返回一个小于0的值;如果当前字符串位于参数字符串之后,则返回一个大于0的值。 |
val length: Int | 返回字符串长度 |
trim() | 去除字符串开头和结尾的空格 |
split(delimiter: String, ignoreCase: Boolean, limit: Int) | 根据delimiter来分割字符串,返回list,第二个参数表示是否忽略大小写,默认为不忽略大小写(备注如果delimiter为多个分隔符的话,会调用私有方法rangesDelimitedBy完成字符串分割) |
indices属性 | 返回有效字符索引的范围。 |
getOrNull(index: Int): Char? | 返回给定索引处的字符,如果索引超出字符序列的范围,则返回null |
contains(other: CharSequence, ignoreCase: Boolean = false) | 如果字符序列包含指定的字符序列,则返回true |
count() | 返回char序列的长度 |
drop(n: Int): | 删除前n个字符后返回一个字符串 |
trimMargin() | 删除前导空格 |
first() | first查找第一个元素,如果字符串为空,则抛出NoSuchElementException异常 |
first { it =='h'} | 查找第一个指定元素是否和条件表达式一致 |
indexOf() | 查找某一个元素或字符串在原字符串中第一次出现的下标。 |
replace()函数 | 字符串替换函数 |
isEmpty() | 判断其length是否等于0,若等于0则返回true,反之返回false。不能直接用于可空的字符 |
isBlank() | 判断其length是否等于0,或者判断其包含的空格数是否等于当前的length。不能直接用于可空的字符串 |
Kotlin中异常处理和java是非常相似的,也是通过try catch finally来处理异常
val a: Int? = try {
parseInt("a")
} catch (e: NumberFormatException) {
null
} finally {
println("异常处理,执行到finally");
}
先简单回顾下java中 throw和throws;
- throw语句:用于抛出一个异常,当程序运行到throw语句的时候即不再继续执行
- throws语句 :如果一个方法可以引发异常,而它本身并不对该异常进行处理,那么该方法必须将这个异常抛给调用者可以使程序能够继续执行下去,这时候就要用到throws语句
kotlin中是没有throws语句的,即没有受检的异常。这是为了防止如下的代码不断的出现
try {
log.append(message)
}
catch (IOException e) {
// 必须要安全
}
Kotlin 中所有异常类都是 Throwable 类的子孙类,使用 throw-表达式来抛出异常:
throw Exception("Hi There!")
区别于java的另一个地方是: Kotlin中的try语句是一个表达式,即它可以有一个返回值:
val a: Int? = try { Integer.parseInt('c') } catch (e: NumberFormatException) { null }
try-表达式的返回值是 try 块中的最后一个表达式或者是(所有)catch 块中的最后一个表达式。 finally 块中的内容不会影响表达式的结果。
再说另一个区别之前,我们先介绍下Kotlin中的Nothing类型,该类型没有值,而是用于标记永远不能达到的代码位置。 在你自己的代码中,你可以使用 Nothing 来标记一个永远不会返回的函数:
public fun catchException(): Nothing {
throw Exception();
}
如上代码中,函数catchException返回的类型为Nothing,当你编写一个Nothing类型的函数的时候,如果不给这个函数的表达式最后一行主动抛出一个异常,即此处的throw Exception(),你会发现程序编译错误,即此函数永远不会返回
区别于java还有一个地方是: 在 Kotlin 中 throw 是表达式,所以你可以使用它(比如)作为 Elvis 表达式(三目运算符)的一部分:
val s = person.name ?: throw IllegalArgumentException("Name required")
throw 表达式的类型是特殊类型 Nothing,如上代码的含义是如果persion.name为null,则抛出异常IllegalArgumentException