Kotlin 中文文档 v2.0.10 Help

字符串(Strings)

Kotlin 中的字符串由类型 String 表示。

通常,字符串值是双引号(" )中的字符序列:

val str = "abcd 123"

字符串的元素是通过索引操作 s[i] 可以访问的字符。 你可以使用 for 循环迭代这些字符:

fun main() { val str = "abcd" //sampleStart for (c in str) { println(c) } //sampleEnd }

字符串是不可变的。一旦初始化了一个字符串,就无法更改其值或为其赋新值。 所有转换字符串的操作都会将结果返回到一个新的 String 对象中,原始字符串保持不变:

fun main() { //sampleStart val str = "abcd" // 创建并打印一个新的 String 对象 println(str.uppercase()) // ABCD // 原始字符串保持不变 println(str) // abcd //sampleEnd }

要连接字符串,使用 + 运算符。这也适用于将字符串与其他类型的值连接起来,只要表达式中的第一个元素是字符串:

fun main() { //sampleStart val s = "abc" + 1 println(s + "def") // abc1def //sampleEnd }

字符串字面量

Kotlin 有两种类型的字符串字面量:

转义字符串

转义字符串 可以包含转义字符。
以下是转义字符串的示例:

val s = "Hello, world!\n"

转义使用传统的方式,即使用反斜杠 (\)。
请参阅 字符 页面获取支持的转义序列列表。

多行字符串

多行字符串 可以包含换行和任意文本。它由三个双引号 (""") 括起,不包含转义,可以包含换行和任何其他字符:

val text = """ for (c in "foo") print(c) """

要从多行字符串中删除前导空格,请使用 trimMargin() 函数:

val text = """ |Tell me and I forget. |Teach me and I remember. |Involve me and I learn. |(Benjamin Franklin) """.trimMargin()

默认情况下,管道符号 | 被用作边距前缀,但你可以选择另一个字符并将其作为参数传递,比如 trimMargin(">")

字符串模板

字符串字面量可以包含 模板表达式—— 这些是会被计算并将结果拼接到字符串中的代码片段。 处理模板表达式时,Kotlin 会自动调用表达式结果的 .toString() 函数将其转换为字符串。 模板表达式以美元符号 ($) 开头,并由以下两种形式之一组成:

fun main() { //sampleStart val i = 10 println("i = $i") // i = 10 val letters = listOf("a","b","c","d","e") println("Letters: $letters") // Letters: [a, b, c, d, e] //sampleEnd }

或花括号中的表达式:

fun main() { //sampleStart val s = "abc" println("$s 的长度是 ${s.length}") // abc 的长度是 3 //sampleEnd }

你可以在多行字符串和转义字符串中都使用模板。 在多行字符串(不支持反斜杠转义)中插入美元符号 $ ,在任何允许作为 标识符 起始符号的地方使用以下语法:

val price = """ ${'$'}_9.99 """

字符串格式化

要按照您的特定要求格式化字符串,请使用 String.format() 函数。

String.format() 函数接受一个格式化字符串和一个或多个参数。 格式化字符串包含一个占位符(由 % 表示)用于指定参数,后面跟着格式说明符。 格式说明符是对相应参数的格式化指令,包括标志、宽度、精度和转换类型。格式说明符共同决定了输出的格式。 常见的格式说明符包括 %d 用于整数, %f 用于浮点数,和 %s 用于字符串。 你还可以使用 argument_index$ 语法在格式化字符串中以不同的格式多次引用相同的参数。

让我们来看一个例子:

fun main() { //sampleStart // 格式化一个整数,添加前导零以达到七个字符的长度 val integerNumber = String.format("%07d", 31416) println(integerNumber) // 0031416 // 格式化一个浮点数,以 + 符号显示,并保留四位小数 val floatNumber = String.format("%+.4f", 3.141592) println(floatNumber) // +3.1416 // 格式化两个字符串为大写,每个占用一个占位符 val helloString = String.format("%S %S", "hello", "world") println(helloString) // HELLO WORLD // 格式化一个负数以括号括起来,然后使用 `argument_index$` 以不同的格式(没有括号)重复相同的数字 val negativeNumberInParentheses = String.format("%(d means %1\$d", -31416) println(negativeNumberInParentheses) //(31416) means -31416 //sampleEnd }

String.format() 函数提供了与字符串模板类似的功能。然而, String.format() 函数更加通用,因为提供了更多的格式化选项。

此外,您可以将格式字符串从变量赋值。这在格式字符串发生变化时非常有用,例如在依赖用户区域的本地化情况下。

使用 String.format() 函数时要小心,因为很容易使参数的数量或位置与其对应的占位符不匹配。

Last modified: 08 九月 2024