Scala 字符串


Scala字符串

什么是字符串?

字符串是指由0个或多个字符组成的有限序列。在Scala中,字符串是一种不可变的对象,也是一个类:scala.collection.immutable.String。可以通过类似于Java的方式来创建一个字符串:

val str: String = "Hello, world!" // 使用双引号

基本操作

拼接字符串

可以使用 + 运算符将字符串拼接在一起:

val s1 = "Hello"
val s2 = "World"
val s3 = s1 + ", " + s2 + "!"
println(s3) // "Hello, World!"

索引和切片

可以通过角标来获取字符串中的某个字符:

val str = "Hello, world!"
val c = str(1)
println(c) // 'e'

由于字符串是不可变的,因此不能使用角标赋值的方式进行修改。可以使用 substring 方法获取一个子字符串:

val s1 = str.substring(0, 5) // "Hello"
val s2 = str.substring(7) // "world!"

注意,substring 方法的第二个参数是可选的,如果省略,则表示截取到字符串的结尾。

遍历

可以使用 for 循环来遍历字符串中的每个字符:

val str = "Hello, world!"
for (c <- str) {
  println(c)
}

比较

可以使用 ==!= 运算符来比较两个字符串是否相等:

val s1 = "Hello, world!"
val s2 = "hello, world!"
if (s1 == s2) {
  println("相等")
} else {
  println("不相等")
}

需要注意的是,Scala中的字符串比较是基于Unicode码点的,而不是基于字典序的。

字符串插值

Scala中的字符串插值是一种方便的方式,可以将变量的值插入到字符串的特定位置上。Scala中有三种字符串插值方式:

s 插值器

s 插值器可以将变量的值插入到字符串中的 ${} 中:

val name = "Scala"
val str = s"Hello, $name!"
println(str) // "Hello, Scala!"

f 插值器

f 插值器可以将变量格式化后插入到字符串中的 ${} 中:

val pi = 3.14
val str = f"The value of pi is approximately $pi%.2f"
println(str) // "The value of pi is approximately 3.14"

${} 中可以使用格式化字符串,其中 % 表示格式化指令的开始,.2 表示小数点后保留两位,f 表示格式化为浮点数。

raw 插值器

raw 插值器可以将变量插入到字符串中,但是不会进行转义:

val str = raw"\n\"Hello\""
println(str) // 换行和双引号不会被转义,输出:"\n\"Hello\""

字符串的常用方法

Scala中的字符串还有许多非常有用的方法,这里只列出一些常用的方法:

方法 描述
concat 连接两个字符串
contains 判断字符串中是否包含指定的子串
endsWith 判断字符串是否以指定子串结尾
indexOf 查找指定子串在字符串中首次出现的位置
lastIndexOf 查找指定子串在字符串中最后一次出现的位置
matches 判断字符串是否与指定的正则表达式匹配
replace 替换指定子串
split 使用指定的分隔符切分字符串
startsWith 判断字符串是否以指定子串开头
substring 获取子串
toCharArray 将字符串转换为字符数组
toLowerCase 将字符串转换为小写形式
toUpperCase 将字符串转换为大写形式
trim 去除字符串两端的空格

总结

Scala中的字符串是一种不可变的对象,支持基本的操作,如拼接、索引和切片等。字符串插值是Scala中的一个特性,可以非常方便地将变量的值插入到字符串中。Scala中还有许多常用的方法可以对字符串进行处理,例如替换、截取、转换等。在编写Scala程序时,字符串是一个非常常用且必要的数据类型。