一、模式匹配
- 类比与Java中的switch…case,但是比其强大并且灵活很多
- 解决符合一定情况下的处理问题
只要匹配到一个case,剩下的就不会匹配
def main(args: Array[String]): Unit = {//match...caseprintln(testMatch("java1"))println(testMatch2(2))println(testMatch3(78))println(testMatch4(78.0))}//普通的一个match...case匹配def testMatch(str:String):String={str match{case "java1"=>"这是Java1"case "java2"=>"这是Java2"case "java3"=>"这是Java3"}}//多种类型的match...case匹配def testMatch2(i:Any):String={i match {case "a"=>"这是字符串"case 1 =>"这是数字类型"case _ =>"这是未知"}}//复杂类型的match...case匹配def testMatch3(i:Int):String={i match {case _ if i<18 =>"您未成年"case _ if i>=18&&i<=60 =>"您成年了"case _ if i>60 =>"您老年了"}}//类型匹配的match...case匹配def testMatch4(i:Any):String={i match {case _:Int => "这是Int类型"case _:String => "这是字符串类型"case _:Double => "这是浮点数类型"case _ => "这是未知类型"}}
二、正则表达式
与Java中的正则表达式作用完全相同
- 通常被用来验证、检索、替换那些符合某个模式(规则)的文本
- 用 “ “ .r 或者Scala.uiil.matching中的Regex类实现对正则的抽象
- findAllIn:查找所有匹配结果
- mkString:连接匹配结果的字符串
正则可以使用管道符 | 指定不同的模式 ```scala var str = “(十八|18)大”.r var teststr = “十八大是一个重要具有里程碑式的会议,18 大以来社会各届取得了显著的进展和成果!” println(str findAllIn teststr.mkString)
val pattern = new Regex(“(十八|18)大”) //正则要去匹配的源字符串 val str = “十八大是一个重要具有里程碑式的会议,18 大以来社会各届取得了显著的进展和成果!” //在源串中查找所有匹配 pattern 正则表达式的值 println((pattern findAllIn str).mkString(“,”))
//定义一个字符串作为正则表达式val pattern = new Regex("[\\d]+")//正则要去匹配的源字符串val str = "十八大是一个重要具有里程碑式的会议,18 大以来会各届取得了显著的进展和成果,影响中国 21 世纪发展的重要会议!"//在源串中查找第一个匹配 pattern 正则表达式的值println((pattern.findAllIn(str)).mkString(","))
<a name="DEBWB"></a># 三、异常处理- 与Java相似,异常类也采取了Java的异常类,并没有重写- 主要包括异常抛出和异常捕捉两大类- 抛出异常用 throw,声明可能的异常与 Java 不同,采用的注解式的@throws(classOf[SomeException])- 异常捕获采用try...catch- Scala 里不需要捕获检查异常:checked exception,也不是必须把它们声明在 throws 子句中。@throws 标注声明一个 throws 子句,但这不是必需的该机制最大的问题是如果遇到异常没有补捉,则程序会终止,如果进行了捕捉,可以按照程序设定的方式去进行,而不必须停止。```scala//捕获异常def main(args: Array[String]): Unit = {try{var f = new FileReader("input.txt")}catch {case ex: FileNotFoundException=>{println("没有找到")}case ex: IOException => {println("不明原因的 IO 异常!") }}}
四、提取器
- 提取器的含义就时从传递给他的对象中提取出构造函数时的参数
- 提取器是一个带有unapply方法的对象,从对象中提取值
apply和unapply时相反的
//提取器def main(args: Array[String]): Unit = {var str1 = apply("张三","21")println(unApply(str1))}def apply(name:String,age:String):String={return name +"-"+ age}def unApply(i:String):Option[(String,String)]={var tempStr = i split("-")if (tempStr.length==2){return Some(tempStr(0),tempStr(1))}else{None}}
五、文件I/O
与Java基本相似
//从文件中读取文件def main(args: Array[String]): Unit = {println("第一种方法")var test1 = Source.fromFile("output.txt")for (temp<-test1.getLines()){println(temp)}println("第二种方法")Source.fromFile("output.txt").foreach(print _)println("第三种方法")var test2 = Source.fromFile("output.txt")test2.foreach(print _)}
