Scala学习: 字符串插值

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 guyue
1*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 a
b
This is raw-interpolation a\nb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章