当前位置: 首页 > news >正文

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

相关文章:

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

4. 正则表达式 4.1 概述 所谓的正则表达式指的是正确的,符合特定规则的式子, 它是一门独立的语言, 并且能被兼容到绝大多数的编程语言中。在scala中, 可以很方便地使用正则表达式来匹配数据。具体如下: Scala中提供了Regex类来定义正则表达式.要构造一个Regex对象&#xff0…...

Flutter运行MacOs网络请求报错Unhandled Exception: DioException [connection error]:...

报错信息 [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioException [connection error]: The connection errored: Connection failed This indicates an error which most likely cannot be solved by the library. Error: SocketException: …...

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

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

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 总结 前言 Godot 项目工程化上有一朵乌云,我看Godot的Visual Studio 项目的时候,发现如果是手动新建项目导入Godot包,会导…...

Openharmony

OpenHarmony 是一个开源的、多设备分布式操作系统,由开放原子开源基金会(OpenAtom Foundation)孵化及运营。它旨在提供跨多种设备的统一开发体验,支持一次开发,多端部署。OpenHarmony 的系统架构遵循分层设计原则&…...

24计算机考研调剂 | 华南师范大学

华南师范大学接收调剂研究生 考研调剂招生信息 学校:华南师范大学 专业:- 年级:2024 招生人数:- 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 课题组主要研究生物拉曼光谱技术、基于荧光的微生物快检技术、显微成像设备与相…...

【Node.js】全局变量和全局 API

node 环境中没有 dom 和 bom ,此外 es 基本上都是可以正常使用的。 如果一定要使用 dom 和bom,可以借助第三方库 jsdom 帮助我们实现操作。npm i jsdom 实例: const fs require(node:fs) const {JSDOM} require(jsdom)const dom new JS…...

Install Docker

Docker Desktop 直接安装 Docker Desktop Docker Desktop includes the Docker daemon (dockerd), the Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper. Linux下安装Docker CE 参考官方文档 参见阿里云的文档 # step 1…...

Orbit 使用指南 10|在机器人上安装传感器 | Isaac Sim | Omniverse

如是我闻: 资产类(asset classes)允许我们创建和模拟机器人,而传感器 (sensors) 则帮助我们获取关于环境的信息,获取不同的本体感知和外界感知信息。例如,摄像头传感器可用于获取环境的视觉信息&#xff0c…...

GPT系列模型的特点

GPT系列模型(包括GPT-1、GPT-2和GPT-3)都基于自回归机制的Transformer架构。在设计上,这些模型的核心思想是利用Transformer架构来捕捉整个序列的上下文信息,通过其独特的自回归机制逐步地整合整个序列的完整语义。GPT系列模型的设…...

Oracle Data Guard常用命令

--查询数据库角色和保护模式 select database_role,switchover_status from v$database; --切换备库为主库(切换后,主库为mount状态) --TO PRIMARY alter database commit to switchover to primary; --SESSIONS ACTIVE alter database comm…...

IM系统设计之websocket消息转发

Websocket消息转发 项目地址:gitgithub.com:muyixiaoxi/Link.git 上周面试被面试官问到:“在分布式IM系统中,如何实现多个websocket集群之间的通信”。 我在思考了良久后回答:“不会”。 随着我的回答,我和面试官的…...

关于vue 的生命周期的教程

Vue.js 是一款流行的前端框架,它提供了丰富的功能和便捷的开发式, 其中生命周期函数是 Vue 组件中非常重要的一部分。 本文将为您详细介绍 Vue 组件的生命周期函数及其执行顺序, 帮助您更好地理解和利用 Vue.js 框架。 什么是 Vue 生命周期 …...

STM32 CAN的工作模式

STM32 CAN的工作模式 正常模式 正常模式下就是一个正常的CAN节点,可以向总线发送数据和接收数据。 静默模式 静默模式下,它自己的输出端的逻辑0数据会直接传输到它自己的输入端,逻辑1可以被发送到总线,所以它不能向总线发送显性…...

Java中的常用类之Math类

Java中的Math类 一、Math类是什么?二、主要方法1.随机数2.绝对值3.向上取值4.向下取值5.四舍五入6.两个值中取大/小的 总结 一、Math类是什么? Math类是Java常用类的一种,主要方法针对于数学方面的运算,类中的所有方法都是static…...

Android冷启动优化

一、应用启动的三种状态 冷启动:系统不存在App进程(APP首次启动或APP被完全杀死)时启动APP,此时,APP的启动将经历两个阶段: 1、创建app进程:系统启动应用程序进程和虚拟机,创建app…...

jmeter之接口功能自动化

一、接口测试简述 接口:用来连接前端,后端还有移动端的程序模块。由于不同端的工作进度不一样,需要对最开始出来的接口进行接口测试。 接口分类:POST,GET,PUT,DELETE。 POST请求的数据是放在…...

【openGL4.x手册07】几何着色器

目录 一、说明二、关于几何着色器三、原始输入/输出规范3.1 实例 四、输入五、输出5.1 分层渲染 六、输出限制 一、说明 几何着色器对于渲染管线设计是一个新生事物;目前对应于几何着色器的资料不多,并且说法不一,因此如何用几何着色器&…...

鸿蒙OpenHarmony开发实战:【MiniCanvas】

介绍 基于OpenHarmony的Cavas组件封装了一版极简操作的MiniCanvas,屏蔽了原有Canvas内部复杂的调用流程,支持一个API就可以实现相应的绘制能力,该库还在继续完善中,也欢迎PR。 使用说明 添加MiniCanvas依赖 在项目entry目录执行…...

【JavaEE初阶系列】——单例模式 (“饿汉模式“和“懒汉模式“以及解决线程安全问题)

目录 🚩单例模式 🎈饿汉模式 🎈懒汉模式 ❗线程安全问题 📝加锁 📝执行效率提高 📝指令重排序 🍭总结 单例模式,非常经典的设计模式,也是一个重要的学科&#x…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异&#xff…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...