《Kotlin从小白到大牛》第7章:字符串

第7章 字符串

由字符组成的一串字符序列,称为“字符串”,在前面的章节中也多次用到了字符串,本章将重点介绍。

7.1 字符串字面量

Kotlin中的字符串字面量有两种:
普通字符串,采用双引号(")包裹起来的字符串。
原始字符串(raw string),采用三个双引号(""")包裹起来的字符串。
在这里插入图片描述
7.1.1 普通字符串
普通字符串字面量与Java语言采用双引号(")包裹起来的字符串,大部分计算机语言都是采用这种方式表示字符串。下面示例都是普通字符串字面量:
“Hello World” ①
“\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064” ②
“世界你好” ③
“Hello \nWorld” ④
“A” ⑤
“” ⑥
Kotlin中的字符采用Unicode编码,所以Kotlin字符串可以包含中文等亚洲字符,见代码第③行的"世界你好"字符串。代码第②行的字符串是用Unicode编码表示的字符串,事实上它表示的也是"Hello World"字符串,可通过println函数将Unicode编码表示的字符串输出到控制台,则会看到Hello World字符串。普通字符串字面量为了包含一些特殊的字符,例如换行,则需要转义符,代码第④行"Hello \nWorld"包含了一个换行符,\n是换行转义符,Kotlin转义符参考表6-4所示。
单个字符如果用双引号括起来,那它表示的是字符串,而不是字符了,见代码第⑤行的"A"是表示字符串A,而不是字符A。
在这里插入图片描述
7.1.2 原始字符串
原始字符串(raw string)字面量采用三个双引号(""")包裹起来的字符串,原始字符串可以包含任何的字符,而不需要转移,所以也不能包含转义字符。示例如下:
“Hello\nWorld” ①
“”“Hello
World”"" ②
代码第①行和第②行表示相同内容的字符串,代码①行是普通字符串字面量表示在Hello和World中间包含转义换行符,代码第②行是原始字符串字面量可以在Hello和World之间直接换行。
示例代码如下:
//代码文件:chapter7/src/com/a51work6/section1/ch7.1.1.kt
package com.a51work6.section1

fun main(args: Array) {

val s1 =""
val s2 = "Hello World"
val s3 ="\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064"
println(s2 == s3) //输出结果为true

val s4 = "Hello\nWorld"
val s5 = """Hello

World"""
println(s4 == s5) //输出结果为true

val s6 ="""Hello\nWorld"""        
println(s6)

}
运行结果:
true
true
Hello\nWorld
上述代码中s2和s3是两个内容相同的字符串,这说明无论采用的是Unicode编码还是普通字符都是相同。s4和s5是也两个内容相同的字符串,这说明无论采用的是普通字符串字面量表示,还是采用原始字面量表示都是相同的。
其中==是比较两个字符串。
在这里插入图片描述
在这里插入图片描述

7.2 不可变符串

在Kotlin中默认的字符串类是String,String是一种不可变字符串,当字符串进行拼接等修改操作时,会创建新的字符串对象,而可变字符串不会创建新对象。在Kotlin中可变字符串类是StringBuilder。

7.2.1 String
本节先介绍不可变字符串String类的使用。Kotlin提供的不可变字符串类是kotlin.String,获得String对象可以有两种方式:
使用字符串字面量赋值。
使用转换函数。
直接使用字符串字面量赋值前面已经使用过了。下面重点介绍转换函数,这些函数都是顶层函数不需要对象就可以直接使用。
1.字节数组转换成字符串函数:
fun String(
bytes:ByteArray, //要转换的字节数组
offset: Int, //字节数组开始索引,该参数可以省略。
length: Int, //转换字节的长度,该参数可以省略。
charset:Charset //解码字符集 ,该参数可以省略。
): String

2.字符数组转换成字符串函数:
fun String(
chars:CharArray, //要转换的字符数组
offset: Int, //字符数组开始索引,该参数可以省略。
length: Int //转换字符的长度,该参数可以省略。
): String

3.可变字符串StringBuilder转换成字符串函数:
fun String(stringBuilder: StringBuilder): String

示例代码如下:
//代码文件:chapter7/src/com/a51work6/ch7.2.kt
package com.a51work6

fun main(args: Array) {

val chars = charArrayOf('a', 'b','c', 'd', 'e')  //创建字符数组      ①

val s1 = String(chars)     // 通过字符数组获得字符串对象      ②
val s2 = String(chars, 1, 4) // 通过子字符数组获得字符串对象  ③
println("s1 = " + s1)  //输出结果s1 = abcde
println("s2 = " + s2)  //输出结果s2 = bcde

val bytes = byteArrayOf(97, 98,99)   //创建字节数组             ④
val s3 = String(bytes)     // 通过字节数组获得字符串对象     ⑤
val s4 = String(bytes, 1, 2) // 通过子字节数组获得字符串对象  ⑥
println("s3 = " + s3)   //输出结果s3 = abc
println("s4 = " + s4)   //输出结果s4 = bc

}
上述代码第①行是使用charArrayOf函数创建字符数组。代码第②行是将chars数组中的全部字符用来创建字符串。代码第③行是将chars数组中的部分字符用来创建字符串。
代码第④行是使用byteArrayOf函数创建字节符数组。代码第⑤行是采用默认字符集将bytes数组中的全部字节用来创建字符串。代码第⑥行是采用默认字符集将bytes数组中的部分字节用来创建字符串。
字符串在程序代码中应用十分广泛,下面通过几个方面介绍一下在Kotlin中如何使用字符串。本节所介绍的字符串是String类及相关函数使用。

7.2.2 字符串拼接
String字符串虽然是不可变字符串,但也可以进行拼接只是会产生一个新的对象。String字符串拼接可以使用+和+=运算符。+和+=运算符是可以连接任何类型数据拼接成为字符串。
字符串拼接示例如下:
//代码文件:chapter7/src/com/a51work6/section2/ch7.2.2.kt
package com.a51work6.section2

fun main(args: Array) {

val s1 = "Hello"
// 使用+运算符连接
val s2 = s1 + " "              ①
val s3 = s2 + "World"   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值