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!") //这行代码并不会被执行.
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+MyBatis框架的智慧生活商城系统的设计与实现(源码+LW+部署+讲解)

目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台功能拓展 商品详情单管理 个人中心 秒杀活动 推荐系统 评论与评分系统 后台功能拓…

Rust 函数体内能定义数据类型或者做其他什么事情吗?

一、可以在函数体内定义数据类型吗? 在 Rust 中,你不能直接在函数体内定义新的数据类型(如结构体或枚举)。数据类型必须在模块或块的作用域内定义,这通常是在函数外部。然而,你可以在函数体内定义新的类型…

分布式之网关介绍

一、网关简介 1、网关背景 由于微服务“各自为政的特性”使微服务的使用非常麻烦。通常公司会有一个“前台小姐姐”作为统一入口,这就是网关 2、网关作用 统一入口:为服务提供一个唯一的入口,网关起到外部和内部隔离的作用, 保…

Day31 贪心算法

Day31 贪心算法 455.分发饼干 我的思路: 小孩数组g指针一直前移,只有饼干数组s满足条件时,才前移,并且更新num 解答: class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.…

【Golang星辰图】创造美丽图表,洞察数据:解析Go语言中的数据可视化和数据分析库

解锁数据的力量:深入研究Go语言中的数据可视化和数据分析库 前言 本文将介绍Go语言中几个优秀的数据可视化和数据分析库,以帮助开发者更好地处理和分析数据。这些库提供了丰富的功能和工具,可用于创建漂亮的可视化图表、进行数值计算和数据…

阿里云幻兽帕鲁4核16G和8核32G服务器优惠价格

2024阿里云幻兽帕鲁专用服务器价格表:4核16G幻兽帕鲁专用服务器26元一个月、149元半年,默认10M公网带宽,8核32G幻兽帕鲁服务器10M带宽价格90元1个月、271元3个月。阿里云提供的Palworld服务器是ECS经济型e实例,CPU采用Intel Xeon …

C#,图论与图算法,用于检查给定图是否为欧拉图(Eulerian Graph)的算法与源程序

1 欧拉图 欧拉图是指通过图(无向图或有向图)中所有边且每边仅通过一次通路, 相应的回路称为欧拉回路。具有欧拉回路的图称为欧拉图(Euler Graph), 具有欧拉通路而无欧拉回路的图称为半欧拉图。 对欧拉图的一个现代扩展是蜘蛛图,它向欧拉图增加了可以连接的存在点。 这给…

AJAX-综合

文章目录 同步代码和异步代码回调函数地狱解决回调函数地狱Promise-链式调用async函数和awaitasync函数和await-捕获错误 事件循环宏任务与微任务Promise.all静态方法 同步代码和异步代码 同步代码:逐步执行,需原地等待结果后,才继续向下执行…

英语面试研究

系统架构师面试常用英语词汇和表达详细总结 系统架构师的面试通常会涉及到一些专业的英语词汇和表达,这些词汇和表达有助于更准确地描述架构设计、技术选型、系统优化等方面的内容。以下是一些常用的英语词汇和表达,以及它们在面试中的潜在用途&#xf…

阿里云效流水线—发布公用jar到Maven私仓

后端项目发布 1.选择流水线 2.新建流水线 3.选择模板 4.选择代码仓库 5.调整构建命令 添加mvn install 重新构建项目 6.添加镜像 在wms-app目录下新建Dockerfile文件(Dockerfile文件名中的D一定要是大写的)文件,重新推送项目 #基础镜像 FROM openjd…

【力扣hot100】1. 两数之和 49.字母异位词分组 128. 最长连续序列

目录 1. 两数之和题目描述做题思路参考代码 49.字母异位词分组题目描述做题思路参考代码 128. 最长连续序列题目描述做题思路参考代码 1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数…

EPO企业生产运营数智化平台助力制造企业迈向智能制造

随着“中国制造2025”和工业4.0的不断推进,越来越多的制造企业准备迈入智能制造和智慧制造领域,实现数智化管理。企业通过搭建EPO企业生产运营平台,结合自身业务现状和数字化需求,从各个业务场景、部门人员、产品组成等方面进行分…

Django缓存(二)

一、视图缓存 Django的缓存可以设置缓存指定的视图,具体方式使用django.views.decorators.cache.cache_page, 方法有2种方式: 装饰器:以方法以装饰器的方式使用 from django.views.decorators.cache import cache_page@cache_page(60 * 15,cache="default") def…

【算法每日一练]-图论(保姆级教程篇16 树的重心 树的直径)#树的直径 #会议 #医院设置

目录 树的直径 题目:树的直径 (两种解法) 做法一: 做法二: 树的重心: 题目: 会议 思路: 题目:医院设置 思路: 树的直径 定义:树中距离最…

科技革新背后:码垛机器人在不同领域的实践应用

随着科技的进步,机器人技术已经渗透到各个行业之中,成为提高生产效率、减少人工成本的重要工具。码垛机器人作为自动化技术的杰出代表,其在各个行业中的应用场景日益广泛,从食品饮料到化工产品,再到物流仓储&#xff0…

睿考网:注册会计师考试有年龄限制吗?

参加注册会计师考试是否有年龄限制?现行的规定并没有要求考生的年龄,所以只要符合既定的报名条件任何人都是可以参加的。 报名资格要求如下: 1. 报考者须为中国国籍公民,并且具备完全的民事行为能力。 2. 学历要求方面&#xf…

nginx配置ssl支持https的详细步骤

nginx配置ssl支持https的详细步骤 文章概要:在建站的时候我们通常要让网站通过https进行访问,不然使用http过程中,所有信息都是未加密的,并且用户访问的时候浏览器会屏蔽我们的网站。本文介绍如何通过nginx配置ssl以支持通过https…

CSS的特殊技巧

1.精灵图 使用精灵图核心总结: 1. 精灵图主要针对于小的背景图片使用。 2. 主要借助于背景位置来实现--- background-position 。 3. 一般情况下精灵图都是负值。(千万注意网页中的坐标: x轴右边走是正值,左边走是负值&#xf…

Spring设计模式-实战篇之策略模式 + 工厂模式

案例:使用策略模式和工厂模式优化大量的if-else 原先代码如下,有衣服、零食、蔬菜三种类型的商品,并且每一类满减折扣不一样,如果使用if-else,代码会显得非常冗长,并且大量的if-else很容易眼花导致维护代码…

Mybatis DAO开发

使用Mybatis开发Dao,通常有两个方法,即 原始Dao开发方法Mapper代理开发方法 原始DAO开发方式 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,无非就是在Dao实现类里面调用映射文件里面定义的sql而已。 工具类 package org.example.u…