在 Scala 中,字符串是非常重要且常用的数据类型。Scala 的字符串在许多方面与 Java 的字符串相似,但它也为函数式编程提供了一些增强功能。Scala 使用 String 类型来表示文本数据,提供了丰富的操作方法,使得字符串处理变得更加方便。


📖 目录

  1. 字符串的创建
  2. 字符串的连接与插值
  3. 字符串方法
  4. 正则表达式
  5. 字符串与字符数组
  6. 字符串格式化
  7. 字符串常见操作示例
  8. 参考资料

1. 字符串的创建

在 Scala 中,字符串可以通过几种方式创建:

字符串字面量:

val str1 = "Hello, Scala!"
println(str1)  // 输出:Hello, Scala!

Scala 中的字符串字面量可以直接使用双引号 " 包裹。

使用 String 类构造:

val str2 = new String("Hello from new String")
println(str2)  // 输出:Hello from new String

虽然可以使用 new String() 构造函数来创建字符串,但不推荐这样做,因为字符串是不可变的,并且 Java 和 Scala 中的字符串字面量已经自动处理了字符串对象的创建。


2. 字符串的连接与插值

字符串连接:

Scala 支持使用 + 运算符进行字符串连接,或者使用 StringBuilder 来进行更高效的连接。

val greeting = "Hello"
val name = "Scala"
val message = greeting + ", " + name + "!"
println(message)  // 输出:Hello, Scala!

字符串插值:

Scala 提供了三种字符串插值的方法:s 插值、f 插值和 raw 插值。

s 插值:

s 插值允许将表达式嵌入字符串中。

val name = "Scala"
val message = s"Hello, $name!"
println(message)  // 输出:Hello, Scala!

f 插值:

f 插值用于格式化字符串,可以指定格式化规则(例如,保留小数位数)。

val name = "Scala"
val version = 2.13
val message = f"Hello, $name! You are version $version%.1f"
println(message)  // 输出:Hello, Scala! You are version 2.1

raw 插值:

raw 插值用于输出原始字符串,即忽略转义字符(例如,\n 会被打印为文字)。

val message = raw"Hello\nScala"
println(message)  // 输出:Hello\nScala


3. 字符串方法

Scala 中的字符串是不可变的,因此每个字符串方法都会返回一个新的字符串。下面是一些常用的字符串方法:

常用方法:

  • length: 获取字符串的长度。
  • toUpperCasetoLowerCase: 将字符串转换为大写或小写。
  • substring(start, end): 获取子字符串。
  • charAt(index): 获取指定索引位置的字符。
  • trim: 去除字符串两端的空白字符。
  • contains(substring): 检查字符串是否包含指定的子字符串。

示例:

val str = "  Hello, Scala!  "
println(str.length)           // 输出:17
println(str.toUpperCase)      // 输出:  HELLO, SCALA!  
println(str.trim)             // 输出:Hello, Scala!
println(str.substring(0, 5))  // 输出:Hello
println(str.contains("Scala")) // 输出:true


4. 正则表达式

Scala 的 Regex 类提供了强大的正则表达式支持,可以用于模式匹配、替换等操作。

示例:

val pattern = "Scala".r
val str = "Hello, Scala!"

if (pattern.findFirstIn(str).isDefined) {
  println("Found Scala in the string!")  // 输出:Found Scala in the string!
}

val replaced = str.replaceAll("Scala", "World")
println(replaced)  // 输出:Hello, World!

Regex 类用于表示正则表达式,并可以通过 .r 方法将字符串转换为正则表达式对象。


5. 字符串与字符数组

Scala 字符串背后是由字符数组 Array[Char] 实现的。可以通过 toCharArray 方法将字符串转换为字符数组,也可以使用 apply 方法通过索引访问字符。

示例:

val str = "Hello"
val charArray = str.toCharArray
println(charArray.mkString)  // 输出:Hello

// 使用索引访问字符
println(str(1))  // 输出:e


6. 字符串格式化

Scala 支持字符串的格式化,可以通过 String.format()f 插值来实现格式化。通过格式化,我们可以控制字符串输出的精度、宽度和对齐方式。

示例:

val pi = 3.14159
val formatted = f"Pi value is $pi%.2f"
println(formatted)  // 输出:Pi value is 3.14

f 插值中,%.2f 控制了浮点数的显示精度为 2 位。


7. 字符串常见操作示例

查找子字符串

val str = "Hello, Scala!"
println(str.indexOf("Scala"))  // 输出:7
println(str.lastIndexOf("a"))  // 输出:10

替换子字符串

val str = "Hello, Scala!"
val newStr = str.replace("Scala", "World")
println(newStr)  // 输出:Hello, World!

分割字符串

val str = "apple,orange,banana"
val fruits = str.split(",")
println(fruits.mkString(" "))  // 输出:apple orange banana

检查空白

val str = "   "
println(str.isEmpty)  // 输出:false
println(str.trim.isEmpty)  // 输出:true


8. 参考资料


Scala 中的字符串处理非常强大且灵活,支持各种常用操作,如连接、插值、格式化、正则表达式匹配等。理解和掌握这些基本操作将帮助你更高效地处理文本数据,构建健壮的应用程序。