Scala 字符串
Scala 字符串
Section titled “Scala 字符串”在 Scala 中,字符串是字符序列,由 String 类型表示,它直接由 Java 的 java.lang.String 支持。这意味着 Scala 字符串是不可变的(immutable),并且你可以访问所有标准的 Java 字符串方法。
创建字符串:
Section titled “创建字符串:”字符串通常使用双引号括起来的字符串字面量创建。
val greeting: String = "Hello, world!"val language = "Scala"
// Multi-line stringsval multiLine = """This is amulti-linestring."""
@main def StringCreationDemo(): Unit = { println(greeting) println(language) println(multiLine)}与 Java 字符串一样,Scala 字符串也是不可变的。一旦创建,String 对象就不能被改变。看起来修改字符串的操作(如连接)实际上是创建并返回一个新的 String 对象。
val s1 = "Hello"val s2 = s1 + ", Scala!" // Creates a new String "Hello, Scala!"
println(s1) // Output: Hello (s1 remains unchanged)println(s2) // Output: Hello, Scala!对于需要进行多次修改的场景,请使用 scala.collection.mutable.StringBuilder 以获得更好的性能,然后使用 .toString() 转换回 String。
字符串内插:
Section titled “字符串内插:”Scala 提供了强大的字符串内插(string interpolation)功能,可以直接将变量值或表达式嵌入字符串字面量中。这通常比传统的字符串连接更具可读性。
s 内插器:
Section titled “s 内插器:”在字符串字面量前加上 s。以 $ 开头的变量或表达式会被求值并插入。
val name = "Alice"val age = 30val message = s"My name is $name and I am $age years old."val complexMessage = s"Next year, I will be ${age + 1}."
println(message) // Output: My name is Alice and I am 30 years old.println(complexMessage) // Output: Next year, I will be 31.f 内插器:
Section titled “f 内插器:”在字符串字面量前加上 f。允许使用变量/表达式后的 printf 风格格式说明符后跟 % 来格式化嵌入的值。
val height = 1.825 // metersval weight = 75.5 // kgval formatted = f"Height: $height%.2f meters, Weight: $weight%.1f kg"
println(formatted) // Output: Height: 1.83 meters, Weight: 75.5 kgraw 内插器:
Section titled “raw 内插器:”在字符串字面量前加上 raw。类似于 s,但不处理转义序列(如 \n, \t)。
val path = raw"C:\Users\Default\Documents"val escaped = s"This has a newline \n character."val rawEscaped = raw"This has a literal \n sequence."
println(path) // Output: C:\Users\Default\Documentsprintln(escaped) // Output: This has a newline // character.println(rawEscaped) // Output: This has a literal \n sequence.常见字符串操作:
Section titled “常见字符串操作:”Scala 字符串继承了 Java 的方法,并且 Scala 的 RichString 隐式转换增加了更多方法。
| 方法/运算符 | 描述 |
|---|---|
length | 返回字符数。 |
charAt(index) | 返回指定索引处的字符。 |
concat(str) or + | 连接字符串。 |
substring(begin, end) | 提取子字符串。 |
toUpperCase, toLowerCase | 转换为大写/小写。 |
startsWith(prefix), endsWith(suffix) | 检查是否以指定前缀开头/后缀结尾。 |
contains(substring) | 检查是否包含指定子字符串。 |
indexOf(char/str), lastIndexOf(char/str) | 查找第一个/最后一个出现位置的索引。 |
replace(oldChar, newChar), replaceAll(regex, replacement) | 替换字符或匹配模式。 |
split(separator) | 根据分隔符将字符串分割成数组。 |
trim | 移除开头/结尾的空白字符。 |
isEmpty, nonEmpty | 检查字符串是否为空。 |
toIntOption, toDoubleOption, etc. | (来自 RichString)安全地转换为数字类型,返回 Option。 |
val data = " Scala Programming "println(s"Length: ${data.length}") // Output: 21println(s"Char at 3: ${data.charAt(3)}") // Output: Cprintln(s"Trimmed: '${data.trim}'") // Output: 'Scala Programming'println(s"Uppercase: ${data.trim.toUpperCase}") // Output: SCALA PROGRAMMINGprintln(s"Contains 'Prog': ${data.contains("Prog")}") // Output: trueval parts = data.trim.split(" ")println(s"Split: ${parts.mkString(", ")}") // Output: Scala, Programmingval numStr = "123"println(s"To Int Option: ${numStr.toIntOption}") // Output: Some(123)val badNumStr = "abc"println(s"To Int Option: ${badNumStr.toIntOption}") // Output: None请参考 java.lang.String 和 scala.collection.immutable.StringOps(通过 RichString)的文档,以获取可用方法的完整列表。