对之前scala学习的一个总结,本篇博客主要对scala中的一些基本类型、流程控制等基本的操作进行介绍,加深自己的理解。
字符串
字符串作为编程语言中最为常用、基础的类型,其操作是十分重要的,下面介绍scala中字符串的说明以及操作。
1、scala中String操作
scala中的字符串实际上就是java中String,在java中的一些用法在scala中也是支持的,但由于scala中支持隐式转换,其实StringOps类中的所有方法,在scala中的String中也全部可以使用,在该类中基本上包括了上百字符串操作方法(毫不夸张),在scala中本质上将String看做是字符集合,单个字符的访问可以直接按下标进行访问,因此在该类中还包含了一些对于集合操作的方法,例如filter、map、reduceLeft等。另外说明一下,在scala中基本上一些常用的操作方法基本上都对应有符号化的操作符来表示,更加方便使用,示例如下:
println("China" ++ "Taiwan")
//这里进行比较的是字母的前后顺序,不是长度
println("China" < "Taiwan")
println("China" +: "Taiwan")
println("China TaiWan".map(c => (c, 1)))
ChinaTaiwan
true
Vector(China, T, a, i, w, a, n)
Vector((C,1), (h,1), (i,1), (n,1), (a,1), ( ,1), (T,1), (a,1), (i,1), (W,1), (a,1), (n,1))
以上是scala中String操作函数基本的应用,相比java的字符串操作,scala进行了全面的扩充,而且可以用==直接进行相等判断,用起来感觉更加顺畅,里边还包含了很多的其他的有趣有用的函数(take、drop),这里不再一一说明了。
2、多行字符串表示
在scala中可以创建多行String,
"""
This is
a dog
"""
3、引用变量
在scala基础字符串的插值就是在字符串前加’s’,然后将变量名插入字符串中,用$进行标识,同时可以使用内嵌表达式,示例如下:
val name = "tongtong"
println(s"$name is a boy.")
println(s"${name.toUpper} is a boy.")
tongtong is a boy.
TONGTONG is a boy.
s其实是StringContext类中的方法,用以实现简单的插值操作,它里边其实调用了更高阶的函数standardInterpolator进行实现;除了s之外,还包含f和raw的插值操作,f表示格式化的输出,raw表示不会对字符进行转义,示例如下:
val name = "tongtong"
val age = 10.001
println("$name is a boy.")
println(s"${name.toUpperCase} is a boy\n.")
println(f"${name.toUpperCase} is a boy, and he is $age%.2f years\n.")
println(raw"${name.toUpperCase} is a boy\n.")
$name is a boy.
TONGTONG is a boy
.
TONGTONG is a boy, and he is 10.00 years
.
TONGTONG is a boy\n.
更加细致的解释,可以关注一下StringContext这个类(严格的说,它是object)。
下标是格式化字符串输出时的一些规则:
格式化符号 | 描述 |
---|---|
%c | 字符 |
%d | 十进制数字 |
%e | 指数浮点数 |
%f | 浮点数 |
%i | 整数(十进制) |
%o | 八进制 |
%s | 字符串 |
%u | 无符号十进制 |
%x | 十六进制 |
%% | 打印百分号 |
\% | 打印百分号 |
4、字符串中的正则表达式
scala中字符串很容易表示出正则表达式,即在字符串的后面加上“.r”就完成了正则表达式的创建,在使用正则表达式时,可以使用查找模式,也可以使用匹配模式,详细代码介绍如下 :
val regex = "[0-9]+".r
// 查找模式&