Scala
一、 使用 +
号连接字符串
-
在 Scala 中,
+
运算符实际上会调用String
类的concat
方法或者使用字符串的加法操作,生成一个新的字符串。 -
字符串是不可变的,每次拼接都会创建一个新的字符串。
Mr. yu
- Tips:
- 性能相对较差,特别是拼接大量字符串时。因为每次拼接都会创建一个新的字符串对象,导致频繁的内存分配和垃圾回收(GC)。
二、 使用 printf
格式化字符串
类似于 C 语言中的 printf
函数,也可以用来控制输出的格式,比如指定数字的小数位数、输出的宽度等。
占位符 | 用途 | 示例格式 | 解释 | 示例代码 | 输出示例 |
---|---|---|---|---|---|
%s | 字符串 | %s | 格式化字符串 | printf("Hello, %s!\n", "yushifu") | Hello, yushifu! |
%d 或 %i | 十进制整数 | %d | 格式化整数 | printf("I am %d years old.\n", 30) | I am 30 years old. |
%f | 浮动小数(浮点数) | %.2f | 格式化浮动小数 | printf("Pi is approximately %.2f.\n", 3.14159) | Pi is approximately 3.14. |
%e 或 %E | 科学计数法 | %.2e | 格式化浮动小数为科学计数法 | printf("Large number: %.2e\n", 123456.789) | Large number: 1.23e+05 |
%x | 十六进制数(小写) | %x | 格式化为小写十六进制 | printf("Hexadecimal: %x\n", 255) | Hexadecimal: ff |
%X | 十六进制数(大写) | %X | 格式化为大写十六进制 | printf("Hexadecimal: %X\n", 255) | Hexadecimal: FF |
%o | 八进制数 | %o | 格式化为八进制 | printf("Octal: %o\n", 64) | Octal: 100 |
%c | 单个字符 | %c | 格式化字符 | printf("Character: %c\n", 'A') | Character: A |
%% | 百分号 | %% | 输出字面百分号 | printf("Discount: %d%%\n", 20) | Discount: 20% |
%5d | 整数最小宽度 5 | %5d | 输出宽度为5的整数,右对齐 | printf("Number: %5d\n", 42) | Number: 42 |
%-5d | 整数最小宽度 5,左对齐 | %-5d | 输出宽度为5的整数,左对齐 | printf("Left-aligned: %-5d\n", 42) | Left-aligned: 42 |
%.3f | 浮动小数精度为3 | %.3f | 格式化浮动小数保留3位小数 | printf("Pi: %.3f\n", 3.14159) | Pi: 3.142 |
%05d | 整数最小宽度5,填充零 | %05d | 输出宽度为5的整数,空白部分用零填充 | printf("Padded with zeros: %05d\n", 42) | Padded with zeros: 00042 |
%+d | 显示符号(包括正号) | %+d | 输出整数时,显示符号 | printf("Signed number: %+d\n", 42) | Signed number: +42 |
% d | 显示符号(包括空格) | % d | 输出整数时,正数前显示空格 | printf("Signed number with space: % d\n", 42) | Signed number with space: 42 |
- 格式控制选项:
- 最小宽度(如
%5d
):指定输出的最小宽度,如果输出的数字或字符不足宽度,则填充空格(默认右对齐)。 - 左对齐(如
%-5d
):指定输出左对齐。 - 精度(如
%.3f
):控制浮动小数的显示精度。 - 填充零(如
%05d
):用零填充空白位置。 - 符号控制(如
%+d
):强制显示符号,正数显示+
,负数显示-
,% d
只对正数加空格。
- 最小宽度(如
三、字符串插值(String Interpolation)
- Scala 提供了三种常见的字符串插值方式:
s
插值、f
插值和raw
插值。
3.1 使用 s
插值字符串
- 在字符串前加上 s,然后用 ${} 包裹要插入的变量或表达式。
s
插值会自动将$
后面的变量值插入到字符串中。如果需要插入的部分是一个表达式,可以将表达式放在花括号{}
中。
官网示例:
- 复杂的表达式,可以把表达式放在
{}
中:
官网示例:
eg.如果要插入的是复杂的表达式,使用 {} 是必须的。
val radius = 3
val area = s"The area of a circle with radius $radius is ${Math.PI * radius * radius}."
println(area) // 输出: The area of a circle with radius 3 is 28.274333882308138.
官网示例:
3.2 使用 f
插值字符串
- 提供了一种简洁且类型安全的方式来格式化字符串,比如控制数字的小数位数、对齐方式等,类似于
printf
。
f"$表达式%格式"
f
表示我们正在使用f
字符串插值器。$表达式
表示你想要格式化的变量或表达式。%格式
是指定对该表达式应用的格式。
$name%s
将name
变量格式化为字符串,%s
是格式化字符串的格式说明符,表示将变量作为字符串输出。$height%2.2f
将height
变量格式化为浮动小数,保留两位小数,输出1.90
。
%.2f
保留 pi
的两位小数
f
插值器的一个重要特性是类型安全。确保格式化字符串的格式符和变量的类型匹配。如果类型不匹配,Scala 编译器会在编译时产生错误。
%d
— 格式化整数。%f
— 格式化浮动小数。%s
— 格式化字符串。%x
— 格式化为十六进制。%4.2f
— 格式化浮动小数,保留 4 位总数,其中 2 位在小数点后。
这样会输出包含 %
符号的字符串,而不会将其误认为是格式化符。
3.3 使用 raw
插值字符串
raw
插值不处理转义字符(如 \n
),直接将字符串中的转义符输出为文字。
不处理转义字符: