Kotlin 字符串
在本教程中,我们将详细讨论Kotlin的一种重要数据类型,即Kotlin String。
Kotlin 字符串
字符串是字符数组。
Kotlin字符串或者多或者少类似于Java字符串,但带有一些新的附加组件。
以下是定义字符串的语法。
var str: String = "Hello" //or var str = "Hello" var newString: String = 'A' //ERROR var newString: String = 2 //ERROR
Kotlin中的String是使用String类实现的。
像Java String一样,Kotlin Strings是不可变的。
var str = "Hello" str += "Kotlin Strings"
上面的声明将第二行中变量" str"的引用更改为字符串池中新创建的字符串(" Hello Kotlin Strings")。
创建一个空字符串
var s = String() //creates an empty string.
与Java不同,Kotlin不需要" new"关键字来实例化类的对象。
Kotlin 字符串的重要属性和功能
长度:这是可以使用String上的点运算符访问的属性。
返回字符串中存在的字符数。get(index):返回在特定索引处指定的字符。
subSequence(startIndex,endIndex):返回介于startIndex和endIndex之间的子字符串,但不包括endIndex字符。
a.compareTo(b)
:如果a等于b,则返回0,如果a <b,则返回正数。
compareTo也接受另一个参数,即" ignoreCase"。
访问字符串中的字符
要访问字符串的各个字符,Kotlin支持索引访问运算符(不同于Java),如下所示。
使用索引运算符
val str = "Hello Kotlin Strings" println(str.length) //prints 20
使用get方法
val str = "Hello Kotlin Strings" println(str.subSequence(0,5)) //prints Hello
遍历字符串我们可以遍历字符串以使用for-in循环访问每个字符,如下所示。
var str = "Hello Kotlin Strings" var s = String() s = "Hello KOTLIN Strings" println(s.compareTo(str)) //prints -32 println(s.compareTo(str,true)) //prints 0
Kotlin字符串中的转义字符
以下是与反斜杠一起使用时的转义字符,其行为有所不同。
\ n
换行符。\ r
回车。\ t
标签。\ b
退格键\"
双引号\'
单引号\
反斜杠\ $
美元符号
字符串模板
代替在字符串中连接表达式,字符串可以包含美元符号后面的表达式/语句,如下所示。
var str = "Hello, Kotlin" print(str[0]) //prints H
使用字符串模板,我们可以在字符串中插入变量和表达式。
字符串模板通常在print
语句中使用。
要在字符串中使用$符号,我们需要对字符进行转义。
val str = "Hello Kotlin Strings" println(str.get(4)) //prints o
原始字符串–多行字符串
原始字符串是放在三重引号内的字符串。
我们不必将三引号中的字符转义。
这些字符串可以在多行中使用,而无需连接每行。
for(element in str){ println(element) }
注意:由于未解析转义字符,因此添加\ n或者\ t不会有任何效果。
var len = str.length var newStr = "Length of str is ${str.length}" //or var newStr = "Length of str is $len" println(Length of str is ${str.length})
当您需要在字符串中指定文件/目录路径时,使用原始字符串非常方便。
我们可以使用trimMargin()
函数缩进原始字符串或者多行删除空格。
var escapedDollar = "Amount is .50" print(escapedDollar) //prints Amount is .50
注意:我们不能将空白字符串作为修剪边距。
trimMargin()函数将字符串修剪到指定的marginPrefix为止。
字符串模板和原始字符串可以组合在一起,如下所示。
var rawString = """Hi How you're Doing I'm doing fine. I owe you .50""" print(rawString) //Prints the following in the console Hi How you're Doing I'm doing fine. I owe you .50
覆盖字符串方法
在Java中,我们通常会覆盖类的toString()方法以显示该类的实例对象的内容。
如下图所示,在Kotlin中也发生了类似的事情。
var rawString = """Hi How you're Doing I'm doing fine\n. I owe you .50""" print(rawString) //prints the following Hi How you're Doing I'm doing fine\n. I owe you .50
打印以上对象不会对初始化的变量有任何了解。
此处是我们重写toString()
方法的地方,如下所示。
var rawString = """Hi How you're Doing |I'm doing fine. |I owe you .50""".trimMargin("|") print(rawString) //Prints the following to the console. Hi How you're Doing I'm doing fine. I owe you .50
注意:与Java不同,Kotlin不需要new
关键字即可初始化类的构造函数。
字符串相等
有两种类型的相等性检查器。
引用相等:检查两个对象的指针是否相同。
使用===
运算符。结构相等:检查两个对象的内容是否相等。
使用" =="。
以下代码段演示了上述检查器。
var str = "Kotlin" var rawString = """Hi How you're Doing $str |I'm doing fine. |I owe you .50""".trimMargin("|") print(rawString) //The following gets printed on the console Hi How you're Doing Kotlin I'm doing fine. I owe you .50
注意:===和==的取反分别是!===和!==。