在本文中,您将借助示例学习Kotlin字符串,字符串模板以及一些常用的字符串属性和函数。
字符串是字符序列。例如,"Hello there!"是字符串字面量。
在Kotlin中,所有字符串都是String类的对象。 这意味着,诸如“Hello here!”之类的字符串文字被实现为该类的实例。
这是在Kotlin中定义 String 变量的方法。例如,
val myString = "Hey there!"
在这里,myString是String类型的变量。
您可以声明 String 类型的变量,并在一条语句中指定其类型,然后在程序中稍后在另一条语句中初始化该变量。
val myString: String ... .. ... myString = "Howdy"
要访问字符串的元素(字符),请使用索引访问运算符。例如,
val myString = "Hey there!" val item = myString[2]
在这里,item 变量包含 myString 字符串的第三个字符y。 这是因为Kotlin中的索引从 0 开始而不是 1。
val myString = "Hey there!" var item: Char item = myString[0] // item = 'H' item = myString[9] // item = '!' item = myString[10] // 错误! 字符串索引超出范围 item = myString[-1] // 错误! 字符串索引超出范围
如果您需要遍历字符串的元素,则可以使用for循环轻松实现。
fun main(args: Array<String>) { val myString = "Hey!" for (item in myString) { println(item) } }
运行该程序时,输出为:
H e y !
像Java一样,字符串在Kotlin中是不可变的。这意味着您不能更改字符串的单个字符。例如,
var myString = "Hey!" myString[0] = 'h' // Error! Strings
但是,如果使用关键字var声明了字符串变量,则可以重新分配该变量。(推荐阅读:Kotlin var Vs val)
fun main(args: Array<String>) { var myString = "Hey!" println("myString = $myString") myString = "Hello!" println("myString = $myString") }
运行该程序时,输出为:
myString = Hey! myString = Hello!
字面量是固定值的源代码表示形式。 例如,“Hey there!” 是直接出现在程序中而不需要计算的字符串文字(如变量)。
Kotlin中有两种类型的字符串字面量:
转义的字符串中可能已转义了字符。 例如
val myString = "Hey there!\n"
这里,\n 是转义字符,用于在文本中出现的位置插入换行符。
以下是Kotlin支持的转义字符列表:
\t - 插入制表符
\b - 插入退格符
\n - 插入换行符
\r - 插入回车符
\' - 插入单引号字符
\" - 插入双引号字符
\\ - 插入反斜杠
\$ - 插入美元字符
原始字符串可以包含换行符(不是换行符)和任意文本。原始字符串由三个引号 """ 分隔。例如,
fun main(args: Array<String>) { val myString = """ for (character in "Hey!") println(character) """ print(myString) }
运行该程序时,输出为:
for (character in "Hey!") println(character)
您可以使用trimMargin()函数删除原始字符串的前导空格。例如,
fun main(args: Array<String>) { println("不使用trimMargin函数的输出:") val myString = """ |Kotlin is interesting. |Kotlin is sponsored and developed by JetBrains. """ println(myString) println("使用trimMargin函数输出:\n") println(myString.trimMargin()) }
运行该程序时,输出为:
不使用trimMargin函数的输出: |Kotlin is interesting. |Kotlin is sponsored and developed by JetBrains. 使用trimMargin函数输出: Kotlin is interesting. Kotlin is sponsored and developed by JetBrains.
默认情况下,trimMargin()函数使用 | 作为边距前缀。但是,您可以通过向该函数传递一个新字符串来更改它。
fun main(args: Array<String>) { val myString = """ !!! Kotlin is interesting. !!! Kotlin is sponsored and developed by JetBrains. """ println(myString.trimMargin("!!! ")) }
运行该程序时,输出为:
Kotlin is interesting. Kotlin is sponsored and developed by JetBrains.
Kotlin有一个很棒的功能,称为字符串模板,它允许字符串包含模板表达式。
字符串模板表达式以美元符号 $ 开头。以下是一些示例:
fun main(args: Array<String>) { val myInt = 5; val myString = "myInt = $myInt" println(myString) }
运行该程序时,输出为:
myInt = 5
这是因为字符串中的表达式$myInt(以$符号开头的表达式)被求值并连接到字符串中。
fun main(args: Array<String>) { val a = 5 val b = 6 val myString = """ |${if (a > b) a else b} """ println("更大的数字是: ${myString.trimMargin()}") }
运行该程序时,输出为:
更大的数字是: 6
由于Kotlin中的字面量是作为String类的实例实现的,因此您可以使用该类的几个方法和属性。
length 属性 - 返回字符串的字符序列的长度。
compareTo 函数 -将此字符串(对象)与指定的对象进行比较。 如果对象等于指定的对象,则返回0。
get 函数 - 返回指定索引处的字符。您可以使用索引访问运算符而不是get函数,因为索引访问运算符在内部调用get函数。
plus 函数 - 返回一个新字符串,该字符串是通过将该字符串与传递给此函数的字符串连接而获得的。您可以使用 + 运算符代替 plus 函数,因为+运算符在后台调用 plus 函数。
subSequence 函数 - 从指定的开始和结束索引处返回一个新的字符序列。
fun main(args: Array<String>) { val s1 = "Hey there!" val s2 = "Hey there!" var result: String println("s1字符串的长度为 ${s1.length}.") result = if (s1.compareTo(s2) == 0) "相等" else "不相等" println("字符串s1和s2是 $result.") // s1.get(2) 等同于 s1[2] println("第三个字符是 ${s1.get(2)}.") result = s1.plus(" How are you?") // result = s1 + " How are you?" println("result = $result") println("子字符串是 \"${s1.subSequence(4, 7)}\"") }
运行程序时,输出为:
s1字符串的长度为 10. 字符串s1和s2是相等. 第三个字符是 y. result = Hey there! How are you? 子字符串是 "the"