Scala第十一章节(正则表达式和异常处理)
4. 正则表达式
4.1 概述
所谓的正则表达式指的是正确的,符合特定规则的式子, 它是一门独立的语言, 并且能被兼容到绝大多数的编程语言中。在scala中, 可以很方便地使用正则表达式来匹配数据。具体如下:
- Scala中提供了Regex类来定义正则表达式.
- 要构造一个Regex对象,直接使用String类的r方法即可.
- 建议使用三个双引号来表示正则表达式,不然就得对正则中的反斜杠进行转义.
4.2 格式
val 正则对象名="""具体的正则表达式""".r
注意: 使用findAllMatchIn方法可以获取到所有正则匹配到的数据(字符串).
4.3 示例一: 校验邮箱是否合法
需求
- 定义一个字符串, 表示邮箱.
- 定义一个正则表达式,来匹配邮箱是否合法.
- 合法邮箱测试:qq12344@163.com
- 不合法邮箱测试:qq12344@.com
- 打印结果.
参考代码
//案例:校验邮箱是否合法.
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 示例二:过滤所有不合法邮箱
需求
- 找出以下列表中的所有不合法的邮箱.
- “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 示例三:获取邮箱运营商
需求
- 定义列表, 记录以下邮箱:
"38123845@qq.com","a1da88123f@gmail.com","zhansan@163.com","123afadff.com"
- 使用正则表达式进行模式匹配,匹配出来邮箱运营商的名字。
例如:
邮箱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 {
//代码
}
**解释: **
- try中的代码是我们编写的业务处理代码.
- 在catch中表示当出现某个异常时,需要执行的代码.
- 在finally中,写的是不管是否出现异常都会执行的代码.
5.3 抛出异常
我们也可以在一个方法中,抛出异常。格式如下:
格式
throw new Exception("这里写异常的描述信息")
5.4 示例
需求
- 通过try.catch来处理 除数为零异常.
- 在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对象࿰…...
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) 则帮助我们获取关于环境的信息,获取不同的本体感知和外界感知信息。例如,摄像头传感器可用于获取环境的视觉信息,…...
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…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
