Scala 提供了三种创新的字符串插值方法:s,f和raw,使用他们我们可以方便快捷的组合字符串。

s 字符串插值器

在任何字符串前加上s,就可以直接在串中使用变量了,在生成字符串的时候会隐式调用其toString方法。

class Complex(val real: Double, val imaginary: Double) {

  override def toString: String = {
s"Complex(real=$real, imaginary=$imaginary)"
}
} val complex = new Complex(23, -1.3) println(s"$complex")
字符串插值器也可以处理任意的表达式: println(s"1+1=${1 + 1}")
f 插值器

在任何字符串字面前加上f,就可以生成简单的格式化串,功能相似于其他语言中的printf函数。

类似于 Java 中的String.format

val height = 1.9d
val name = "James"
println(f"$name%s is $height%.2f meters tall") //James is 1.90 meters tall
raw 插值器

raw插值器可以保证其内的字符不被编码,如n不会被处理为回车

println(s"a\nb")  // a回车b
println(raw"a\nb") // anb
高级用法

在 worksheet 中输入如下代码运行

id"string content"

发现编译器提示:Error:(1, 68) value id is not a member of StringContext

即:该格式会隐式调用 StringContext 的与前缀插值器同名的方法

所以我们自定义插值器只需要这样就可以了:

implicit class JsonHelper(val sc: StringContext) extends AnyVal {
def json(args: Any*): String = {
val strings = sc.parts.iterator
val expressions = args.iterator
var buf = new StringBuffer(strings.next)
while (strings.hasNext) {
buf append expressions.next
buf append strings.next
}
parseJson(buf)
}
}
结语

字符串插值器可以帮助我们快速格式化字符串,s会隐式调用其toString方法,f需要格式模板字符串,raw不会编码字符,我们只需要按需使用即可。

Scala 字符串插值器的更多相关文章

  1. Scala字符串插值

    Scala提供了三种字符串插值方式:s,f和raw.1. s字符串插值器简单的说就是解析字符串变量. val name = "Tom" println(s"His nam ...

  2. Spark记录-Scala字符串

    Scala字符串 在Scala中的字符串和Java中的一样,字符串是一个不可变的对象,也就是一个不能修改的对象.可以修改的对象,如数组,称为可变对象.字符串是非常有用的对象,在本节的最后部分,我们将介 ...

  3. Scala字符串插值 - StringContext

    翻译自:STRING INTERPOLATION 简介 自2.10.0版本开始,Scala提供了一种新的机制来根据数据生成字符串:字符串插值.字符串插值允许使用者将变量引用直接插入处理过的字面字符中. ...

  4. scala的插值器

    Scala 为我们提供了三种字符串插值的方式,分别是 s, f 和 raw.它们都是定义在 StringContext 中的方法. s 字符串插值器 val a = 2println(s"小 ...

  5. Scala:字符串

    http://blog.csdn.net/pipisorry/article/details/52902348 Scala字符串 在 Scala 中,字符串的类型实际上是 Java String,它本 ...

  6. scala字符串前加s使用$

    https://my.oschina.net/u/2000675/blog/1592140 字符串中的变量替换,Scala中基础的字符串插值就是在字符串前加字幕‘s’,然后在字符串中放入变量,每个变量 ...

  7. Scala字符串与容器

    String 前文已经说明了字符串的声明方式: var s = "Hello World"; var s: String = "Hello World"; 在 ...

  8. [转] Scala 2.10.0 新特性之字符串插值

    [From]  https://unmi.cc/scala-2-10-0-feature-string-interpolation/ Scala 2.10.0 新特性之字符串插值 2013-01-20 ...

  9. Scala字符穿插值器

    从2.10.0版本开始,Scala提供了三种创新的字符串插值方法: s.f 和 raw 于2.11.0版本开始,用于模式匹配patter match中 小结: s: s"Hello, $na ...

随机推荐

  1. 安卓安装kali linux之Termux

    解决安装kali无模组问题 https://blog.csdn.net/weixin_44690490/article/details/108599693?utm_source=app 步骤 1.获取 ...

  2. JavaScript深入理解-Set、Map、WeakSet和WeakMap

    Set Set 对象允许储存任何类型的唯一值,无论是原始值或者是对象引用 本质:构造函数,用来生成 Set 数据结构 描述 Set 对象是值的集合,你可以按照插入的顺序迭代它的元素.Set 中的元素只 ...

  3. kubernetes-copyFromPod

    import com.google.common.io.ByteStreams; import io.kubernetes.client.Copy; import io.kubernetes.clie ...

  4. day6.细说类型2

    一.字符串(一)字符串需要掌握的操作1.# strip (清除):序列是一段字符串,该函数表示从头和从尾部同时开始进行扫描,如果扫描的字符在序列字符串中,则剔除掉,一直到遇到一个不在序列字符串中的字符 ...

  5. Python基础语法和数据类型最全总结

    摘要:总结了Python最全基础语法和数据类型总结,一文带你学会Python. 本文分享自华为云社区<Python最全基础语法和数据类型总结>,原文作者:北山啦 . 人生苦短,我用Pyth ...

  6. 域迁移DA | Learning From Synthetic Data: Addressing Domain Shift for Se | CVPR2018

    文章转自:微信公众号「机器学习炼丹术」 作者:炼丹兄(已授权) 联系方式:微信cyx645016617 论文名称:"Learning From Synthetic Data: Address ...

  7. 794. Valid Tic-Tac-Toe State

    A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to r ...

  8. Kafka原理分析之基础篇

    原创文章,转载请标注.https://www.cnblogs.com/boycelee/p/14728638.html 一.Kafka二.解决问题异步处理应用解耦流量削峰三.特性读写效率网络传输并发能 ...

  9. PHP生成随机数的几种方法

    第一种方法用mt_rand() function GetRandStr($length){ $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV ...

  10. hdu4993(水题)

    题意:       x * a + y * b = c xyab都是正整数,给你a,b,c问有多少对xy组合满足等式. 思路:       水题,直接枚举其中一个,然后看求出的y是不是正整数就行了,第 ...