配色: 字号:
part1-字符串
2018-08-16 | 阅:  转:  |  分享 
  
创建多行字符串使用管道符号|,并在多行字符串的结尾添加stripMargin方法。如果不想使用管道符号,则可以使用任何符号,但需要指
定,其格式为:字符序列(本身是个序列)Scala中的字符串与java一样但比java的功能多,scala中的字符串本身没有那么多的
功能,例如scala的字符串本身可以做为字符序列。他是通过隐士转换而来的,这些功能是StringOps类的功能。3字符串中变量替换
关于字符串中变量的替换总共有4个方面(scala中提供了3种插入符号s/f/raw):(1)字符串中插入变量println(s
"name:${name}age:${age}")字符串中插入表达式println(s"name:${name=="x
iaoming"}age:${age+1}")字符串插值(printf格式化,含插入符号f)varnum=200.0prin
tln(f"name:${name}age:${age}num:${num%.2f}")其中:%.2f是printf格式化
的符号Rawraw插入符号与s插入符号不同点是它不识别字符转义println(raw"food\neat")结果food\nea
t不使用插入符号,进行printf格式化Varname=”xiaoming”Varage=12Varstr=“%
sand%d”.format(name,age)Println(str)结果为:xiaomingand12p
rintf格式化符号表4、挨个处理字符串中的字符我们可以用for、foreach、map对字符串中的字符进行处理。其中foreac
h是没有返回值的;map具有隐士循环的功能。例如:将“HelloWord”去除l,并将所有字母转为大写。For注:在for循环添
加yield实际上是将每次循环的结果放到了一个临时存放区中。当循环结束时,在临时存放区中的所有元素以一个集合的形式返回。(2)ma
p注:map和yield最终都以一个集合的形式返回,而foreach则不是。(map自身就有遍历的功能,因此我们之前在wordc
ount中说文件中有多少行就调用flatMap()多少次,是错误的,其实仅仅调用了一次)运用正则表达式进行字符串的匹配我们需要创建
一个正则对象Regex类对象,创建该对象的方法有两种:.r转换方法Varregex=newRegex()创建对象的方
法匹配方式也有两种regex.findFirstIn(str):返回匹配上的字符串的Option类型regex.findAllIn
(str):返回匹配上的字符串的迭代器方式一:方式二:注:[0-9]+其中+表示任意多次的匹配,相当于{1,}6运用正则表达式
进行字符串替换两种方法:字符串的方法str.replaceAll(“正则表达式”,“替换内容”)全部替换str.repl
aceFirst(“正则表达式”,“替换内容”)仅替换第一个(2)正则表达式对应的方法regex.replaceAllIn(st
r,“替换内容”)全部替换regex.replaceFirstIn(str,“替换内容”)仅替换第一个全部替换仅替
换第一个7、访问字符串中的一个字符类型简写全写结果String“hello”(4)“hello”.apply(4)oBi
gIntBigInt(123454)BigInt.apply(123454)就是将123454转为BigInt类型Array数组
Array(1,2,3)Array.apply(1,2,3)定义一个数组注:这个例子想说明的是实质上调用得是apply方法8
、常用类型(1)Scala的7种数值类型:Byte、Char、Short、Int、Long、Float、Double、Boolea
n等在scala中没有包装类型,与java不同的是,这7中数值类型都是类类型(对象类型)。scala并不刻意区分基本类型和引用类
型。在scala中一把上述的7中类型会对应很多方法,其实那是通过隐士转换得到的。CharRichCharDoubleRichDo
ubleIntReachIntBigIntBigIntegerStringStringOps也就是说事实上那些方法都是右侧类的方
法。在String类中添加自定义的方法(通过隐士转化来实现)隐士转换基础实例(将小写字符串转为大写)注:(1)隐士转换的类一定不
能作为顶级位置出现,这就要求,我们所定义的隐士转换类必须含于一个其他类中或一个包中。(2)自定义隐士转换类必须用implicit
关键字来修饰(3)在其他类中若想使用该隐士转换类中的方法就必须通过import来调用,要注意调用格式中我们不写隐士转换的类名和隐士
转换类中的方法名,而写的是包裹该隐士转换类的顶级位置的类名。具体使用过程中是如何匹配到我们所写的隐士类的,以及其中的方法,这个根据
的是参数类型的匹配以及方法名等。上述程序的工作过程:编译器找到一个“abcd”的字符串常量编译器发现要在String上调用一个T
obig方法因为编译器在String类中不到可调用的方法,它开始在当前范围内搜索一个接收String作为参数的隐士转换。4、如此编译器会找到隐士转换类SS,在这个类中找到了Tobig方法。
献花(0)
+1
(本文系实习生101首藏)