1. split 用法:用于分割字符串
scala> "a-b-c".split("-",2) // 2表示分割后字串的个数上限
结果:a,b-c
scala> "a-b-c".split("-",4)
结果:a,b,c
scala> "a,b,,c".split(",")
结果: a,b,"",c
2. mkString用法:可以将数组或集合的字串连接起来
scala> val names = Array("John","Ron","Tom")
scala> names.mkString("-") //字串中间用"-"连接
结果:John-Ron-Tom
scala> names.mkString("[","-","]") //字串最前用"[",最后用"]",中间都用"-"连接
结果:[John-Ron-Tom]
3. contains用法:判断字串里是否有匹配字串,返回布尔值
scala> val str = "abcde"
scala> str.contains("bc")
结果: true
4. 数组操作,转自:http://www.cppblog.com/abilitytao/archive/2014/10/04/208489.aspx
防止原帖被删,复制下来:
定长数组:长度不变的数组Array
如:声明一个长度为10的整形数组,val arr = Array[Int](10)
声明并初始化一个字符串数组: val arrStr = Array(“wo”,”cha”,”yo”)
访问数组方式:访问arrStr第一个元素,arrStr(1)即可
变长数组(即数组缓冲):java中有ArrayList和scala中的ArrayBuffer等效,但是ArrayBuffer更加强大
通过下面的事列来熟悉ArrayBuffer:
import collection.mutable.ArrayBuffer
val arrbuff1 = ArrayBuffer[Int]()
val arrBuff2 = ArrayBuffer(1,3,4,-1,-4)
arrbuff1 += 23 //用+=在尾端添加元素
arrbuff1 += (2,3,4,32) //同时在尾端添加多个元素
arrbuff1 ++= arrBuff2 //可以用 ++=操作符追加任何集合
arrbuff1 ++= Array(2,43,88,66)
arrbuff1.trimEnd(2) //移除最后的2个元素
arrbuff1.remove(2) //移除arr(2+1)个元素
arrbuff1.remove(2,4) //从第三个元素开始移除4个元素
val arr = arrbuff1.toArray //将数组缓冲转换为Array
val arrbuff2 = arr.toBuffer //将Array转换为数组缓冲
遍历数组和数组缓冲:在java中数组和数组列表/向量上语法有些不同,scala则更加统一
通常情况,我们可以用相同的代码处理这两种数据结构
for(…) yield 循环创建一个类型和原集合类型相同的新集合
for循环中还可以带守卫:在for中用if来实现
for(i <- 0 until arrbuff1.length) yield arrbuff1(i) * 2 //将得到ArrayBuffer(2,6,4,-2,-4)
for(i <- 0 until (arrbuff1.length,2)) yield arrbuff1(i) * 2 //将得到ArrayBuffer(12,-4)
for(elem <-0 arrbuff1) print(elem) //如果不需要使用下标,用这种方式最简单了
for(i <- arrbuff1 if arrbuff1 > 0) print i //打印出arrbuff1中为整数的值
arrbuff1.filter( _ > 0).map{ 2 * _} //生成arrbuff1中的正数的两倍的新集合
arrbuff1.filter {_ > 0} map {2 * _} //另一种写法
常用算法:scala有很多便捷内建函数,如
arrbuff1.sum //对arrbuff1元素求和
Array("asd","sdf","ss").max //求最大元素
arrbuff1.sorted //排序
arrbuff1.sortWith(_ < _) //将arrbuff1元素从小到大排序
arrbuff1.sortWith(_ > _) //从大到小排序
util.Sorting.quickSort(Array) //针对数组排序,单不能对数组缓冲排序
val arr = Array(1,23,4,2,45)
arr.mkString(",") //指定分割符
arr.mkString("(",",",")") //指定前缀、分隔符、后缀
更多函数参见Scaladoc
多维数组:
val matrix = Array.ofDim[Int](5,4) //三行四列的二维数组
matrix(2)(3) //访问第二行、第三个元素
scala数组和java互操作:
由于scala数组是用java数组实现的,所以可以在java和scala之间来回传递,引入scala.collectin.JavaConversion ,可以在代码中使用scala缓冲,在调用java方法时,这些对象会被自动包装成java列表。反过来讲,引入scala.collection.asScalaBuffer时,当java方法返回java.util.List时,我们可以让它转换成一个Buffer
5. 正则表达式:见链接 http://www.runoob.com/scala/scala-regular-expressions.html
\\s+ 表示匹配一个或一个以上的不可见字符
6. 映射的操作:部分转自: http://blog.csdn.net/dr_guo/article/details/51115016
val A = Map(1->10,2->20)
val B = Map((1,10),(2,20))
println(A(1)) // 打出 20, A(1)返回键“1”对应的值20
println(B.get(1))
println(A.contains(1))
// .getOrElse(key,xxx) 返回一个Any类型,若键匹配上了则返回对应的值,若没匹配上则返回.getOrElse(key,xxx)中的xxx
println(A.getOrElse(3,"don't have the key"))
//遍历
for((i,j)<-A)println("A:"+i+"---"+j)
//互换键值
val C = for((i,j)<-B) yield(j,i)
for((i,j)<-C)println("C:"+i+"---"+j)
//获得映射键的集合
val keySet = A.keySet
println(keySet)
//获得映射值的集合
val valSet = A.values
println(valSet)
7. 初始化默认值
scala> var i : Int = _
i: Int = 0
scala > var a : String = _
a : String = null