scala_Option、偏函数、正则表达式

Scala(11) -- 模式匹配、Option类型、偏函数、正则表达式、异常处理、提取器(Extractor) 1. 模式匹配 2. Option类型 3. 偏函数 4. 正则表达式 5. 异常处理 6. 提取器(Extractor) 7. 案例 阅读详情

Option类型

使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。



定义

scala中,Option类型来表示可选值。这种类型的数据有两种形式:

  • Some(x):表示实际的值

在这里插入图片描述

  • None:表示没有值

在这里插入图片描述

  • 使用getOrElse方法,当值为None是可以指定一个默认值

示例一

示例说明

  • 定义一个两个数相除的方法,使用Option类型来封装结果
  • 然后使用模式匹配来打印结果
    • 不是除零,打印结果
    • 除零打印异常错误

参考代码

  /**
    * 定义除法操作
    * @param a 参数1
    * @param b 参数2
    * @return Option包装Double类型
    */
  def dvi(a:Double, b:Double):Option[Double] = {
    if(b != 0) {
      Some(a / b)
    }
    else {
      None
    }
  }

  def main(args: Array[String]): Unit = {
    val result1 = dvi(1.0, 5)

    result1 match {
      case Some(x) => println(x)
      case None => println("除零异常")
    }
  }


示例二

示例说明

  • 重写上述案例,使用getOrElse方法,当除零时,或者默认值为0

参考代码

def dvi(a:Double, b:Double) = {
    if(b != 0) {
        Some(a / b)
    }
    else {
        None
    }
}

def main(args: Array[String]): Unit = {
    val result = dvi(1, 0).getOrElse(0)

    println(result)
}

偏函数

偏函数可以提供了简洁的语法,可以简化函数的定义。配合集合的函数式编程,可以让代码更加优雅。



定义

  • 偏函数被包在花括号内没有match的一组case语句是一个偏函数
  • 偏函数是PartialFunction[A, B]的一个实例
    • A代表输入参数类型
    • B代表返回结果类型


示例一

示例说明

定义一个偏函数,根据以下方式返回

输入返回值
1一
2二
3三
其他其他

参考代码

// func1是一个输入参数为Int类型,返回值为String类型的偏函数
val func1: PartialFunction[Int, String] = {
    case 1 => "一"
    case 2 => "二"
    case 3 => "三"
    case _ => "其他"
}

println(func1(2))


示例二

示例说明

  • 定义一个列表,包含1-10的数字
  • 请将1-3的数字都转换为[1-3]
  • 请将4-8的数字都转换为[4-8]
  • 将其他的数字转换为(8-*]

参考代码

val list = (1 to 10).toList

val list2 = list.map{
    case x if x >= 1 && x <= 3 => "[1-3]"
    case x if x >= 4 && x <= 8 => "[4-8]"
    case x if x > 8 => "(8-*]"
}

println(list2)

正则表达式

在scala中,可以很方便地使用正则表达式来匹配数据。



定义

Regex类

  • scala中提供了Regex类来定义正则表达式

  • 要构造一个RegEx对象,直接使用String类的r方法即可

  • 建议使用三个双引号来表示正则表达式,不然就得对正则中的反斜杠来进行转义

    val regEx = """正则表达式""".r
    

findAllMatchIn方法

  • 使用findAllMatchIn方法可以获取到所有正则匹配到的字符串


示例一

示例说明

  • 定义一个正则表达式,来匹配邮箱是否合法
  • 合法邮箱测试:qq12344@163.com
  • 不合法邮箱测试:qq12344@.com

参考代码

val r = """.+@.+\..+""".r

val eml1 = "qq12344@163.com"
val eml2 = "qq12344@.com"

if(r.findAllMatchIn(eml1).size > 0) {
    println(eml1 + "邮箱合法")
}
else {
    println(eml1 + "邮箱不合法")
}

if(r.findAllMatchIn(eml2).size > 0) {
    println(eml2 + "邮箱合法")
}
else {
    println(eml2 + "邮箱不合法")
}


示例二

示例说明

找出以下列表中的所有不合法的邮箱

"38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com"

参考代码

val emlList =
List("38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com")

val regex = """.+@.+\..+""".r

val invalidEmlList = emlList.filter {
    x =>
    if (regex.findAllMatchIn(x).size < 1) true else false
}

println(invalidEmlList)


示例三

示例说明

  • 有以下邮箱列表

    "38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com"
    
  • 使用正则表达式进行模式匹配,匹配出来邮箱运营商的名字。例如:邮箱zhansan@163.com,需要将163匹配出来

    • 使用括号来匹配分组
  • 打印匹配到的邮箱以及运营商

参考代码

// 使用括号表示一个分组
val regex = """.+@(.+)\..+""".r

val emlList =
List("38123845@qq.com", "a1da88123f@gmail.com", "zhansan@163.com", "123afadff.com")

val emlCmpList = emlList.map {
    case x@regex(company) => s"${x} => ${company}"
    case x => x + "=>未知"
}

println(emlCmpList)


大数据必学语言Scala(三十三):scala高级用法 模式匹配 目录 模式匹配 简单匹配 守卫 匹配类型 匹配集合 变量声明中的模式匹配 匹配样例类 - 常用 Option类型 - 重点掌握经常用 偏函数 - 理解 正则表达式 - 了解 模式匹配 scala中有一个非常强大的模式匹配机制,可以应用在很多场景: switch语句 类型查询 以及快速获取数据 简单匹配 在Java中,有switch关键字,可以简化if条件判断语句。在scala中,可以使用match表达式替代。 语法结构: 变量 match{ case"常... 阅读详情

相关推荐

保姆级教程:用STM32CubeMX给STM32F407配置RTC秒中断,并解决掉电时间丢失问题

本文详细介绍了如何使用STM32CubeMX为STM32F407配置RTC秒中断,并解决掉电时间丢失问题。通过硬件原理与软件配置的双视角解析,帮助开发者实现精确计时与时间持久化,适用于物联网设备和工业控制器等场景。

weixin_42519733的博客 136

scala的Option类型

Option类型 使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。 定义 scala中,Option类型来表示可选值。这种类型的数据有两种形式: Some(x):表示实际的值 None:表示没有值 使用getOrElse方法,当值为None是可以指定一个默认值 示例一 示例说明 定义一个两个数相除的方法,使用O...

汉子一枚 1013

AutoCAD二次开发(.Net)之XData

对于CAD中的实体进行筛选等操作,常常会用到实体的XData属性,下面介绍一下实体的XData的增删改。 //XData的新增,修改跟新增一样,new一个ResultBuffer,赋值即可 Document doc=Application.DocumentManager.MdiActiveDocument; using (DocumentLock dl = doc.LockDocument()) { using (Transaction trans = doc.TransactionManager.S.

qq_21489689的博客 2591

Scala之option类型及偏函数使用、异常处理、正则表达式

实际开发中在返回一些数据时难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的在Scala中我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。

黑马程序员官方博客 613

【YOLOv12改进trick】高效多尺度卷积注意力EMCAD_Block模块引入YOLOv12,实现涨点和效率提升,含创新点Python代码

EMCAD引入YOLOv12模块,实现高效多尺度注意力模块引入到YOLOv12中的快速涨点及效率提升

向上生长的程序媛的博客 851

人工智能 (Artificial Intelligence, AI) 原理与代码实例讲解

人工智能 (AI) 机器学习 (Machine Learning) 深度学习 (Deep Learning) 算法 模型 代码实例 应用场景 1. 背景介绍 人工智能 (Artificial Intelligence, AI) 作为一项前沿科技,近年来发展迅速,已渗透到生活的方方面面

AI架构师小马 1225

scala快速入门系列【Option类型】

        本篇作为scala快速入门系列的第三十篇博客,为大家带来的是关于Option类型的内容。 文章目录Option类型定义示例1示例2 Option类型         使用Option类型,可以用来有效避免空引用(null...

大数据梦想家 2084

51单片机 驱动有源/无源蜂鸣器+Proteus仿真

51单片机 驱动有源/无源蜂鸣器+Proteus仿真 相关篇《51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法》 电路搭建 采用NPN管驱动有源蜂鸣器电路 采用PNP管驱动有源蜂鸣器电路 采用PNP管驱动无源蜂鸣器 采用NPN管驱动无源蜂鸣器 Proteus元器件列表 实例代码 /************************************************************************************* * 实验现象:下载程序

perseverance51博客 2万+

Scala练习题

目录题目第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题第十四题第十五题第十六题第十七题第十八题第十九题第二十题第二十一题第二十二题第二十三题第二十四题 题目 1、创建一个demo1的单例,在demo1中创建一个样例类名字为student1,成员变量为name:String, age:Int 创建主方法实例化student,并传参数(“xiaoming”,20)...

wzc8961661的博客 4140

SAP Retail 补货里的 Requirement Groups,站点和商品太多时,主数据维护如何做减法

SAP Retail补货主数据设计中,Requirement Groups(需求组)是常被低估但至关重要的分类机制。它通过将具有相同补货需求的接收方(如门店)按商品分类(Merchandise Category)分组,大幅降低主数据维护量。在大型零售场景中(如800家门店、6万商品),直接维护每个门店和商品的组合参数会导致维护量失控。Requirement Groups允许企业按品类特性(如乳制品、饮料等)为不同门店组设置统一补货参数,并随业务变化灵活调整。该机制与商品分类紧密绑定,不同于MRP Group

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 67

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5241

【scala】Option类型详解

scala中的Option操作

weixin_44441131的博客 2912

告别 DIFY 构建卡顿 / 失败!巧用 Makefile 一键构建本地 WEB 镜像,附核心避坑指南

本文详细介绍了DIFY本地源码构建WEB镜像的完整流程,重点解决因官方npm源不稳定导致的构建失败问题。通过修改web/Dockerfile文件启用国内npmmirror镜像源,可大幅提升依赖下载速度和稳定性。在DIFY根目录执行封装好的make build-web命令即可一键完成构建,无需手动编写复杂docker命令。文章还提供了前置环境准备、构建结果验证等实用指导,帮助开发者高效完成DIFY前端二次开发后的镜像构建验证。

2501_93651177的博客 181

scala快速入门--Option类型、偏函数、正则表达式、异常处理、提取器、泛型的使用方法

scala快速入门–Option类型、偏函数、正则表达式、异常处理、提取器的使用方法 文章目录scala快速入门--Option类型、偏函数、正则表达式、异常处理、提取器的使用方法1、Option类型2、偏函数3、正则表达式4、异常处理4.1、捕获异常4.2、抛出异常5、提取器(Extractor)5.1、定义提取器6、泛型6.1、定义一个泛型方法6.2、泛型类6.3、泛型的上下界6.3.1、上...

Mr_Yang888的博客 517

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

scala----option类型及偏函数、异常处理、正则表达式

scala option使用,偏函数使用、异常处理、正则表达式

qq_40585384的博客 932

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Scala 高级语法

Scala 高级语法Option 类型偏函数正则表达式Actor(并发编程模型)高阶函数作为值的函数匿名函数柯里化闭包隐式转换和隐式参数定义隐式转换的使用场景自动导入隐式转换方法隐式参数 Option 类型 使用 Option 类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以 返回一个 Option 类型来替代 即:使用 Option 来封装返回结果 ① Some(X):表示实际的值 final case class Some[+A](val value : A) ext

半吊子Kyle的博客 659

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Scala高级用法

目录1 样例类1.1 定义样例类1.2 样例类方法1.3 样例对象2 模式匹配2.1 简单匹配2.2 守卫2.3 匹配类型2.4 匹配集合2.5 变量声明中的模式匹配2.6 匹配样例类3 Option类型4 偏函数5 正则表达式6 异常处理6.1 捕获异常6.2 抛出异常7 提取器(Extractor)7.1 定义提取器8 泛型8.1 定义一个泛型方法8.2 定义一个泛型类8.3 上下界8.4 协变、逆变、非变9 Actor介绍9.1 Java并发编程的问题9.2 Actor并发编程模型9.3 Java并发

赵广陆 800

十一、Scala的模式匹配、偏函数、正则表达式、异常处理和提取器

Scala的模式匹配、偏函数、正则表达式、异常处理和提取器1. 模式匹配1.1 简单模式匹配1.2 匹配类型1.3 守卫1.4 匹配样例类1.5 匹配集合1.6 变量声明中的模式匹配1.7 匹配for表达式2. Option类型2.1程序的执行流程对比2.2代码对比3. 偏函数3.1启动scala解释器3.2执行scala代码3.3退出解释器4. 正则表达式4.1需求4.2目的4.3代码5. 异常处理6. 提取器(Extractor)7. 案例:随机职业 1. 模式匹配 1.1 简单模式匹配 1.2 匹配

Buluchacha的博客 466

Scala(五)

Scala 五模式匹配模式匹配-类型模式匹配-正则表达式模式匹配-对象样例类样例对象Option类型偏函数(PartialFunction) 模式匹配 模式匹配时, 会从第一个 case分支开始, 如果匹配成功, 则执行对应的逻辑代码, 并结束当前模式匹配. 如果所有 case都不匹配, 那么会执行 case _分支, 类似于 Java中 default语句 如果没有 case _分支, 那会抛 scala.MatchError match case语句, 可以匹配任何类型, 而不单是字面量 (=>

Shawn Jeon`s blog 865

Scala编程语言中的高级特性

Scala模式匹配,ScalaOption类型,Scala偏函数,Scala正则表达式,Scala提取器(Extractor)

Maverick_曲流觞的博客 684

Scala:样例类、模式匹配、Option、偏函数、泛型(三)

Scala:样例类、模式匹配、Option、偏函数、泛型 课程目标 掌握样例类的使用 掌握模式匹配的使用 1. 样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),在后续要学习并发编程和spark、flink这些框架也都会经常使用它。 1.1 定义样例类 语法格式 case class 样例类名([var/val] 成员变量名1:类型1, 成员变量名2:类型2, 成员变量名3:类型3) 如果要实现某个成员变量可以被修改,可以添加var 默认为val,可以

Maynor的博客 761

Scala第十一章节

Scala第十一章节 1.模式匹配 2. Option 类型 3.偏函数 4.正则表达式 5.异常处理 6.提取器 7.案例:随机职业

坚定目标,超越自我 366

Scala基础语法小结(四)

1.样例类 样例类是一种特殊的类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类) 1.1定义样例类 语法: case class 样例类名([var/val] 成员变量名1:类型1, 成员变量名2:类型2, 成员变量名3:类型3) 如果要实现某个成员变量可以被修改,可以添加var 默认为val,可以省略 1.2定义一个样例类 需求: 定义一个Person样例类,包含姓...

qq_42786792的博客 358

Scala(三)常用功能

1.模式匹配和样例类 1)模式匹配 Scala是没有Java中的switch case语法的,相对应的,Scala提供了更加强大的match case语法,即模式匹配,来替代switch case,match case也被称为模式匹配 match case的语法如下: 变量 match { case 值 =&gt; 代码 } 如果值为下划线“_”,则代表了不满足以上所有情况下的默认情况如何处理。 ...

博客&brz 487

Scala系列19:Option类型,隐函数以及正则表达式的使用详解

0. Option类型 使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。 scala中,Option类型来表示可选值。这种类型的数据有两种形式: Some(x):表示实际的值 None:表示没有值 使用getOrElse方法,当值为None是可以指定一个默认值 0.1示例演示 示例1 定义一个两个数相除的方法,使用Option类型来封装结果 然后使用模式匹配来打印...

涤生大数据 886

Scala学习笔记(三)

Scala学习笔记(三)一、模式匹配1. 简单模式匹配2. 匹配类型3. 守卫4. 匹配样例类5. 匹配数组6. 匹配列表7. 匹配元组8. 变量声明中的模式匹配8.1 获取数组中的元素8.2 获取List中的数据二、样例类1. 定义样例类2. 定义一个样例类3. 可变成员变量4. 样例类的方法4.1 apply方法4.2 toString方法4.3 equals方法4.4 hashCode方法4...

AidenBrett7的博客 860
上一篇: scala_样例类、样例对象、模式匹配
下一篇: scala_异常处理、提取器、泛型
Imflash
博客等级 码龄8年 66粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值