Kotlin 字符串

时间:2020-02-23 14:37:32  来源:igfitidea点击:

在本教程中,我们将详细讨论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

注意:===和==的取反分别是!===和!==。