Scala学习: 字符串插值

来源:互联网 发布:韩信点兵的算法 编辑:程序博客网 时间:2024/06/05 19:51

Scala学习: 字符串插值


自2.10.0版本开始Scala提供了一种新的机制来处理字符串:字符串插值。字符串插值允许 开发者将 ‘变量’直接引用到 ‘字符串’常量中。
Scala有三种类型的字符串插值方式:
  • s: 在任何字符串前加上s,就可以在字符串中 引用 变量 或 表达式了。
    • 变量:$变量名。
    • 表达式:${a+b}
  • f: 在任何字符串前加上f,就可以格式化字符串,类似于StringFormat 或 printf 的效果。使用f时所有引用变量后面都应该加上一个’printf-style’格式的字符串:Java 格式化类 java.util.Formatter 基本用法
    • 1 整数- 可应用于 Java 的整数类型:byte、Byte、short、Short、int、Integer、long、Long 和 BigInteger
    • 2 浮点- 可用于 Java 的浮点类型:float、Float、double、Double 和 BigDecimal
    • 3 日期/时间- 可应用于 Java 的、能够对日期或时间进行编码的类型:long、Long、Calendar 和 Date。
    • 4 百分比- 产生字面值 ‘%’ (‘\u0025’)
    • 5 行分隔符- 产生特定于平台的行分隔符
类型 符号 结果 字符 C c 结果是一个 Unicode 字符 字符 S s 如果参数 arg 为 null,则结果为 “null”。如果 arg 实现 Formattable,则调用 arg.formatTo。否则,结果为调用 arg.toString() 得到的结果。 布尔 B b 如果参数 arg 为 null,则结果为 “false”。如果 arg 是一个 boolean 值或 Boolean,则结果为 String.valueOf() 返回的字符串。否则结果为 “true”。 整数 H s 如果参数 arg 为 null,则结果为 “null”。否则,结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。 整数 d 结果被格式化为十进制整数 整数 o 结果被格式化为八进制整数 整数 X x 结果被格式化为十六进制整数 浮点 E e 结果被格式化为用计算机科学记数法表示的十进制数 浮点 f 结果被格式化为十进制数 浮点 G g 根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。 浮点 A a 结果被格式化为带有效位数和指数的十六进制浮点数
  • raw: 除了对字符串中的插值不做处理外,作用与s是相同的。
object HelloTest {  def main(args: Array[String]): Unit = {    // s插值    val name = "guyue"    println(s"Hello, my name is $name")    // 处理表达式 需要计算的表达式要包括在 "\${}"中    println(s"1*3=${1*3}")    println("------------------")    // f插值    val int1:Int = 8;    val int2:Int = 32;    val short1:Short = 8;    val long1:Long = 8;    val float1:Float = 8.0f;    val double1:Double = 8.0d;    println(f" I am int, value = $int1%d")    println(f" I am int, value = $int1%d")    println(f" I am int, value = $int2%e")    println(f" I am int, value = $int2%E")    println(f" I am short, value = $int1%d")    println(f" I am long, value = $int1%d")    println(f" I am float, value = $int1%f")    println(f" I am double, value = $double1%f")    println(f" I am double, value = $double1%s")    println("------------------")    // raw插值    println(s"This is s-interpolation a\nb")    println(raw"This is raw-interpolation a\nb")  }}
运行结果:
Hello, my name is guyue1*3=3------------------ I am int, value = 8 I am int, value = 8 I am int, value = 3.200000e+01 I am int, value = 3.200000E+01 I am short, value = 8 I am long, value = 8 I am float, value = 8.000000 I am double, value = 8.000000 I am double, value = 8.0------------------This is s-interpolation abThis is raw-interpolation a\nb