Scala第十一章节(正则表达式和异常处理)

4. 正则表达式

4.1 概述

所谓的正则表达式指的是正确的,符合特定规则的式子, 它是一门独立的语言, 并且能被兼容到绝大多数的编程语言中。在scala中, 可以很方便地使用正则表达式来匹配数据。具体如下:

  1. Scala中提供了Regex类来定义正则表达式.
  2. 要构造一个Regex对象,直接使用String类的r方法即可.
  3. 建议使用三个双引号来表示正则表达式,不然就得对正则中的反斜杠进行转义.

4.2 格式

val 正则对象名="""具体的正则表达式""".r

注意: 使用findAllMatchIn方法可以获取到所有正则匹配到的数据(字符串).

4.3 示例一: 校验邮箱是否合法

需求
  1. 定义一个字符串, 表示邮箱.
  2. 定义一个正则表达式,来匹配邮箱是否合法.
  3. 合法邮箱测试:qq12344@163.com
  4. 不合法邮箱测试:qq12344@.com
  5. 打印结果.
参考代码
//案例:校验邮箱是否合法.
object ClassDemo13{
     def main(args:Array[String]):Unit={
  //需求:定义一个正则表达式,来匹配邮箱是否合法
  //1.定义一个字符串,表示邮箱.
  val email="qq12344@163.com"
  //2.定义一个正则表达式,用来校验邮箱.
  /*
    .表示任意字符
    +数量词,表示前边的字符出现至少1次,至多无所谓.
      @表示必须是@符号,无特殊含义.
    \.因为.在正则中有特殊的含义,所以要转移一下,使它变成普通的.  */
  val regex=""".+@.+\..+""".r
  //3.打印结果.
  if(regex.findAllMatchIn(email).size!=0){
   //合法邮箱
   println(s"${email}是一个合法的邮箱!")
     }else{
         println(s"${email}是一个非法的邮箱!")
  }
     }
}

4.4 示例二:过滤所有不合法邮箱

需求
  1. 找出以下列表中的所有不合法的邮箱.
  2. “38123845@qq.com”, “a1da88123f@gmail.com”, “zhansan@163.com”, “123afadff.com”
参考代码
//案例:过滤所有不合法的邮箱.
object ClassDemo14{
     def main(args:Array[String]):Unit={
  //1.定义列表,记录邮箱.
val emlList=List("38123845@qq.com","a1da88123f@gmail.com","zhansan@163.com","123afadff.com")
  //2.定义正则表达式.
  valregex=""".+@.+\..+""".r
  //3.通过过滤器获取所有的不合法的邮箱.
  val list=emlList.filter(x=>regex.findAllMatchIn(x).size==0)  
  //4.打印结果.
  println(list)
     }
}

4.5 示例三:获取邮箱运营商

需求
  1. 定义列表, 记录以下邮箱:
"38123845@qq.com","a1da88123f@gmail.com","zhansan@163.com","123afadff.com"
  1. 使用正则表达式进行模式匹配,匹配出来邮箱运营商的名字。
例如:
邮箱zhansan@163.com,需要将163(运营商的名字)
匹配出来.提示:
1. 使用括号来匹配分组.
2. 打印匹配到的邮箱以及运营商.
参考代码
//案例:获取邮箱运营商.
object ClassDemo15{
     def main(args:Array[String]):Unit={
  //1.定义列表,记录邮箱.
  val emlList=List("38123845@qq.com","a1da88123f@gmail.com","zhansan@163.com","123afadff.com")
           //2.定义正则表达式.
  val regex=""".+@(.+)\..+""".r
  //3.根据模式匹配匹配出所有合法的邮箱及其对应的运营商.
  val result=emlList.map{
   //email就是emlList这个列表中的每一个元素.
   //company表示:正则表达式中你用()括起来的内容,也就是分组的数据.   caseemail@regex(company)=>email->s"${company}"
   case email=>email->"未匹配"
  }
  //4.打印结果
  println(result)
     }
}

5. 异常处理

5.1 概述

来看看下面这一段代码:

def main(args: Array[String]): Unit = {
val i = 10 / 0
println("你好!")
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ForDemo$.main(ForDemo.scala:3)
at ForDemo.main(ForDemo.scala)

执行程序,可以看到scala抛出了异常,而且没有打印出来"你好! "。说明程序出现错误后就终止了。 那怎么解决该问题呢? 在Scala中,可以使用异常处理来解决这个问题. 而异常处理又分为两种方式:

  • 方式一: 捕获异常.

注意: 该方式处理完异常后, 程序会继续执行.

  • 方式二: 抛出异常.

注意: 该方式处理完异常后, 程序会终止执行.

5.2 捕获异常

格式
try {
//可能会出现问题的代码
}
catch{
case ex:异常类型1 => //代码
case ex:异常类型2 => //代码
}
finally {
//代码
}

**解释: **

  1. try中的代码是我们编写的业务处理代码.
  2. 在catch中表示当出现某个异常时,需要执行的代码.
  3. 在finally中,写的是不管是否出现异常都会执行的代码.

5.3 抛出异常

我们也可以在一个方法中,抛出异常。格式如下:

格式
throw new Exception("这里写异常的描述信息")

5.4 示例

需求
  1. 通过try.catch来处理 除数为零异常.
  2. 在main方法中抛出一个异常.
参考代码
//案例: 演示异常处理.
object ClassDemo16 {
def main(args: Array[String]): Unit = {
//1. 通过try.catch来处理 除数为零异常.
try {
//可能出问题的代码
val i = 10 / 0
} catch {
//出现问题后的解决方案.
//case ex:Exception => println("代码出问题了!")
case ex:Exception => ex.printStackTrace()
}
println("你好!")
println("-" * 15) //我是分割线.
//2. 抛出一个异常对象.
throw new Exception("我是一个Bug!")
println("Hello, Scala!") //这行代码并不会被执行.
}
}

相关推荐

  1. Scala章节(表达式异常处理)

    2024-03-24 05:58:01       36 阅读
  2. Scala章节(Option类型偏函数)

    2024-03-24 05:58:01       41 阅读
  3. Scala 补充 异常处理...

    2024-03-24 05:58:01       31 阅读
  4. Scala章节(掌握模式匹配相关内容)

    2024-03-24 05:58:01       32 阅读
  5. Scala学习笔记15: 文件表达式

    2024-03-24 05:58:01       21 阅读
  6. js执行异常处理 箭头函数 表达式

    2024-03-24 05:58:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 05:58:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 05:58:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 05:58:01       82 阅读
  4. Python语言-面向对象

    2024-03-24 05:58:01       91 阅读

热门阅读

  1. Python XML 解析

    2024-03-24 05:58:01       40 阅读
  2. 特种兵旅游-扬州、南京

    2024-03-24 05:58:01       37 阅读
  3. vue3之声明式和编程式导航

    2024-03-24 05:58:01       44 阅读
  4. 5.83 BCC工具之tcplife.py解读

    2024-03-24 05:58:01       38 阅读
  5. creator-webview与Android交互

    2024-03-24 05:58:01       29 阅读
  6. 2024最新华为OD机试试题库全 -【贪心歌手】- C卷

    2024-03-24 05:58:01       35 阅读
  7. Scala第十一章节(Option类型和偏函数)

    2024-03-24 05:58:01       41 阅读
  8. pytorch图像数据集定义

    2024-03-24 05:58:01       33 阅读
  9. 24计算机考研调剂 | 华南师范大学

    2024-03-24 05:58:01       37 阅读