Kotlin字符串,Kotlin语言相对于Java语言在字符串上做了一些增强,字符串也是一种数据类型,在这里进行详细讲解。
字符串的定义
字符串表示一串连续的字符,在Kotlin中用String表示一个字符串时,需要用一对英文半角格式的双引号""
引起来。一个字符串可以包含一个或者多个字符,也可以不包含任何字符,即长度为0。字符串的定义方式如下:
var str: String = "Hello World!" //第1 种定义方式
var str = "Hello World!" //第2 种定义方式
字符串是不可变的,字符串中的元素可以使用索引的形式进行访问:即“变量名+角标”的形式,如str[i];也可以用for循环遍历字符串,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
var str = "Hello World!"
// 获取字符串长度
println(str.length)
// 通过索引方式访问某个字符,角标从0 开始
println(str[4])
// 通过for 循环迭代字符串
for (c in str) {
print(c)
}
}
运行结果:
12
o
Hello World!
值得一提的是,上述代码中for循环语句主要用于遍历集合中的元素,for关键字后边()中包括了3部分内容,分别是循环对象、in和循环集合,{}
中的执行语句为循环体。
字符串的常见操作
在Kotlin程序中,字符串的常见操作除了遍历以外,还有字符串查找、字符串截取、字符串替换、字符串分隔、字符串去空格、字符串字面值、字符串模板等,接下来针对这几个操作进行详细的讲解。
1. 字符串查找
在Kotlin中,为了方便字符串的查找,提供了多个函数,如first()、last()、get(index)
,分别用于查找字符串中的第1个元素、最后1个元素以及角标为index的元素,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
var str = "Hello World!"
println(str.first()) // 获取第1个元素
println(str.last()) //获取最后1个元素
println(str.get(4)) //获取第5个元素
println(str[4]) //获取第5个元素
println(str.indexOf('o')) //查找字符串在原字符串中第1次出现的角标
println(str.lastIndexOf('o')) //查找字符串在原字符串中最后1次出现的角标
}
运行结果:
H
!
o
o
4
7
2. 字符串截取
在Kotlin中,字符串截取主要使用的是subString()
函数和subSequence()
函数,这两个函数都有重载函数(函数名相同,参数不同),如表所示。
接下来通过一段示例代码演示上述方法的使用,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
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.subSequence(IntRange(3, 7))) // 截取角标为3,到角标为 7 的字符
}
运行结果:
lo World!
lo W
lo Wo
lo W
lo Wo
3. 字符串替换
在Kotlin中,除了可以使用Java中的replace()函数实现字符串的替换之外,还可以使用replaceFirst()、replaceAfter()、replaceBefore()
等函数用于字符串的替换,如表所示。
接下来通过一段示例代码演示上述方法的使用,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
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!"))
}
运行结果:
Hello Kotlin! Hello Kotlin!
Hello Kotlin! Hello World!
Kotlin! Hello World!
Hello Kotlin!
4. 字符串分隔
与Java语言类似,Kotlin语言中的字符串分隔也是调用split()函数进行的,接下来在一个例子中通过调用split()函数进行字符串分隔,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
val str = "hello.kotlin" //字符串
val split = str.split(".") //根据点号进行拆分
print(split) //打印拆分结果
}
运行结果:
[hello, kotlin]
从运行结果可以看出,“hello.kotlin”字符串已经被拆分为两个字符串,分别为“hello”和“kotlin”。在Kotlin中,split()函数还可以传入多个拆分符,多个拆分符中间只需用逗号分隔即可。具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
var str="hello.kotlin/world"
var split=str.split(".","/")
println(split)
}
运行结果:
[hello, kotlin, world]
5. 字符串去空格
在实际操作中,经常需要删除字符串中的空格,为此Kotlin提供了trim()、trimEnd()
等多个函数,其中trim()用于删除字符串前面的空格,trimEnd()用于删除字符串后面的字符。具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
var str = " Hello World! "
println(str.trim())
println(str.trimEnd())
}
运行结果:
Hello World!
Hello World!
从运行结果可以看出,trim()函数已经将字符串前面的空格删除,trimEnd()函数已经将字符串后面的空格删除。
6. 字符串字面值
字符串的字面值是一串字符常量,字符串字面值常量是用双引号括起来””的零个或多个字符,如“hello”。Kotlin中有两种类型的字符串字面值,一种是转义字符串,可以包含转义字符,另一种是原生字符串,可以包含转义字符、换行和任意文本。
(1)转义字符串
转义是采用传统的反斜杠“\”方式将字符进行转义。Kotlin中的转义字符串与Java中的转义字符串类似,字符串在输出时,如果想要输出一些特殊字符,则需要用到转义字符串,比如\t,\b,\n,\r,\',\",\\
和\$
。在这里以\n(换行符)为例,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
// 字符串中包含转义字符
val str = " 您\n好"
println(str)
}
运行结果:
您
好
从运行结果可以看出,转义字符串在输出时,并不是保持字符串中原有内容输出,而是输出转义后的内容。
多学一招:反斜杠(\)
反斜杠(\)
是一个特殊的字符,被称为转义字符,它的作用是用来转义后面的一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如换行(\n)
。下面列出一些常见的转义字符。
\r
:表示回车符,将光标定位到当前行的开头,不会跳到下一行。\n
:表示换行符,换到下一行开头。\t
:表示制表符,将光标移动到下一个制表符的位置,类似在文档中用Tab键的效果。\b
:表示退格符号,类似键盘上的Backspace键。\'
:表示单引号字符,在Kotlin代码中单引号表示字符的开始和结束,如果直接写单引号字符(')
,程序会认为前两个是一对,会报错,因此需要使用转义字符(\')
。\"
:表示双引号字符,Kotlin中双引号表示字符串的开始和结束,包含在字符串中的双引号需要转义,比如””。\\
:表示反斜杠字符,由于在Kotlin代码中的反斜杠(\)
是转义字符,因此需要表示字面意义上的\
,就需要使用双反斜杠(\\)
。
(2)原生字符串
原生字符串是使用3对引号("""""")
把所有字符括起来,原生字符串可以有效地保证字符串中原有内容的输出,即使原生字符串中包含转义字符也不会被转义,具体代码如所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
// 转义字符串
val str1 = " 您\n好"
println(str1)
// 原生字符串
val str2 = """ 您 \n 好"""
println(str2)
}
运行结果:
您
好
您\n好
从运行结果对比可以看出,在转义字符串中,会执行换行操作,而在原生字符串中,即使包含转义字符也并不执行转义操作。
7. 模板表达式
字符串可以包含模板表达式。所谓的模板表达式就是在字符串中添加占位符,字符串模板表达式由${变量名/函数/表达式}组成,也可以省略{}
,例如“$变量名”。接下来介绍一下字符串模板表达式的几种使用方式。
(1)在字符串中,使用模板表达式存储字符串的值,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
var a = 1;
// 语法格式${变量}
var s1 = "a is ${a}"
// 可以省略大括号
var s2 = "a is $a"
println(s1)
println(s2)
}
运行结果:
a is 1
a is 1
(2)在字符串中,使用模板表达式调用其他方法,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
// 语法格式${方法()}
println("${helloWorld()}")
}
fun helloWorld(): String {
return "Hello World"
}
运行结果:
Hello World
在上述代码中用关键字fun声明了一个方法helloWorld(),冒号后边的String表示该方法的返回值类型,关键字return表示返回后面的字符串,“Hello World”为该方法返回的具体信息。
(3)在字符串中,使用模板表达式执行替换操作,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
var s2 = "a is 1"
// 语法格式${表达式},执行表达式
var s3 = "${s2.replace("is", "was")}"
println(s3)
}
运行结果:
a was 1
在上述代码中,“s2.replace("is","was")”
是一个表达式,这个表达式的含义是将字符串s2中的“is”替换成“was”,从运行结果中可以看到已经将这个表达式执行成功。
(4)在原生字符串中,使用模板表达式输出$需要使用{''}
,具体代码如下所示。
package com.itheima.chapter02.string
fun main(args: Array<String>) {
val price = """${'$'}8.88"""
println(price)
}
运行结果:
$8.88
由于原生字符串中不支持反斜杠转义“\”,因此在原生字符串中如果想要使用模板表达式输出字符只能使用{''}
。
酷客教程相关文章:
评论前必须登录!
注册