字符串
"Hello World".getClass // 获取类 class java.lang.String
"Hello World".getClass.getName //获取类名 java.lang.String
66.getClass //int
66.getClass.getName //int
scala 的String 就是Java 的String 类。所以,它可以直接调用 Java 中String 的所有方法。如计算长度length
,是否以xx开头startsWith
,以xx结尾endsWith
包含contains
拼接 +
替换等等常用的字符串方法。
同时也可以把String 当作字符序列来对待。进行 foreach
,filter
,map
等方法
虽然String在Java中被声明为了final
,但是依旧可以通过 隐式转换 给String 添加自定义方法。
字符串中的变量代换
字符串代换类似于 其他语言的 %s
只是scala 提供四种已定义的:s
,f
,raw
,format
格式
s
val name = "xiaoming"
val sex = "boy"
val age = 18
val run = 100
val aen = s"$name is ${age} old" //xiaoming is 18 old 如果只是简单的代入,那么可以省略{}
val ben = s"xiaoming run ${run+100} km" //xiaoming run 200 km //did xiaoming run 100 km right? true 数字和数字相加
val cen = s"did xiaoming run 100 km right? ${run == 100 } "
val den = s"xiaoming ${age+"100"}? no" //xiaoming 18100? no 注意这里的数字和字符串相加
class Person(val name:String,val age:Int)
val lihong = new Person("lihong",33)
val fen = s"${lihong.name} is a ${lihong.age} old woman" // 使用对象变量
val gen = s"$lihong.name is a $lihong.age old woman" //省略{}那么就不会计算而是直接打印Test$Person$1@1888ff2c.name is a Test$Person$1@1888ff2c.age old woman
f 用于数字字符串插值
val a = 10
val aen = f"$a%.2f bigger then $a?" //10.00 bigger then 10?
raw 是原生字符串,也就是说 不对 字符串进行转义。和""" """
效果类似
val men = raw"hello
xiaoming"
val nen ="""hello
xiaohong"""
format 和python 中的format差不多,但是占位符由{} 变成了% ,因此感觉更是format 和% 模式的结合体
val name = "xiaoqing"
val age = 1000
val oen = "%s is %d years old".format(name,age)//xiaoqing is 1000 years old
printf("%s is %d years old",name,age) //printf 的用法
正则表达式
scala的正则表达式有两种写法,但都殊途同归,生成一个正则匹配对象。
- 通过 字符串
.r
的方式生成一个正则匹配对象
val pat = "\d+".r
val sen = "I am 20 years old,i hava 5 yuan"
val mat = pat.findFirstIn(sen) // 只找第一个 Some(20)
val matt = pat.findAllIn(sen) // 查找所有,返回的是 一个迭代器。
- 通过引入
Regex
生成一个正则匹配对象
import scala.util.matching.Regex
val pat = new Regex("\d+")// 注意这里 是 \ 两个反斜杠
val sen = "I am 20 years old,i hava 5 yuan"
val mat = pat.findFirstIn(sen)
val matt = pat.findAllIn(sen)