Scala String 基础
内容参考 Scala Cookbook
内容:string声明,相等,划分,插补器
Scala 中的String就类似于Java中的String,可以使用Java中全部的String方法
可以创造一个string变量 val s = "Hello world"
获取字符串长度 s.length //12
可以将两个字符串合并为一个字符串 val s = "Hello" + "World" //s = "HelloWorld"
String实例是定义在StringOps类里面,可以使用里面的所有的方法。例如foreach,filter等
ex: val str = "HelloWorld".filter(_!='l') // str = "HeoWord"
在java里面String类是被声明为final的,但是在Scala里面增加了新的功能,通过隐式转换来实现
例子:
scala>: "scala".drop(2).take(2).capitalize //drop(n:Int) 丢弃前n个 take(n:Int) 取前n个 capitalize 大写
res0:String = AL
比较两个字符串是否相等
和java中的判断字符串相等的方法有所不同。java中是用equals方法,scala中用"=="来判断
scala>: val s1 = "Hello"
scala>: val s2 = "H" + "ello"
scala>: s1 == s2
res0: Boolean = true
注意:“==”方法不会出现 NullPointerException异常,即使你把字符串设置为空
scala>: val s3 : String = null
scala>: s1 == s3
res1: Boolean = false
但是如果对一个空字符串进行方法调用,就会出现空指针异常
scala>:s1 = "hello"
scala>:s2 = "Hello"
scala>:s1.toUpperCase == s2.toUpperCase
java.lang.NullPointerException
忽略大小写:
equalsIgnoreCase 会比较两个字符串的字符和长度(不会比较大小写)
scala>: val s1 = "hello"
scala>: val s2 = "Hello"
scala>: s1.equalsIgnoreCase(s2)
res0: Boolean = true
字符串划分
使用spilt方法对字符串进行划分
//spilt会返回String类型的数组
对划分的数组进行打印
Scala中的很多方法是被重写过的,对于字符串来说,有的来自Java String class ,有的来自Scala StringLike class,就按照split来分析
上面的方法来自String,下面的方法来自StringLike,但这两个方法的作用是几乎一样的
在字符串中插入变量
s
使用s可以在字符串中插入变量。根据official Scala string interpolation dpcumentation中的描述,当在字符串前面加上"s",会在字符串中产生一个string插入器,可以将变量嵌入字符串中。插入变量的前面加上"$变量名"。
也可以用花括号来嵌套表达式:${} 不加括号不会执行表达式
可以打印对象的成员变量
Scala区别于Java最大的一方面就是隐式转换,都是用val(类似于final)/var来声明变量,会根据你的赋值进行自动的转换,这就是为什么在Java中有些变量不用初始化(如全局),而Scala要求所有的变量声明之前必须要进行初始化操作,不进行初始化操作,Scala就不知道你这个变量是什么。要控制格式的输出,看下面。
f (输出格式)printf style formatting
raw interpolator
除了s和f,在Scala2.10以上被版本中提供了另一个插入器 raw interpolator
对字符串中不进行换行
自己定义interpolator
最常用的字符表示
处理字符串中的每一个字符
如果你想对一个字符串中的每一个字符进行处理,那么就需要对字符串的每一个字符进行遍历,先看看java的实现
在Java中,只能用for来进行遍历,而且对字符串中的字符进行运算之后产生的新的字符只能加到StringBuilder中,Java中的String都是final类型,是无法改变的,然后再讲StringBuilder转化为字符串。
而Scala的方式和Java有很大差别。要对字符串中的每一个字符进行操作,一般使用map,foreach,for....s
map方法将String看做是char元素的一个序列
upper2是对upper1的简化,upper3组合了两个不同的方法。这三个操作都会产生新的字符串,其中第三个操作产生两个字符串。
foreach:
如果大家不习惯用map和foreach方法,可以用下面的for loop
yield是针对于for loop设置的,每一次循环得出来的结果就会被暂时放到一个区域中,当循环完成,所有的元素会返回到一个集合中
Scala Cookbook是这样描述的: