Scala Extention

正则

import scala.util.matching.Regex
import scala.util.matching.Regex.Match/*----------------------------------------------------------匹配
*/
val rtr = "^(\\w+)@([a-z0-9]{2,})\\.(com|cn|edu|org)$";
val regex:Regex = rtr.r
// 同 Java 的简单匹配
val bool: Boolean = "12665473@qq.com".matches(rtr)/*----------------------------------------------------------查找:模式匹配,对象提取:【元组,样例类】
*/
val tp3: (String, String, String) = "12665473@q.com" match {case regex(g1, g2, g3) => (g1, g2, g3)case _ => ("INVALID", "INVALID", "INVALID")
}/*----------------------------------------------------------替换
*/
val rtr = "(8\\d+)"
val regex:Regex = rtr.r
val content = "java:88,mysql:80,scala:69,spark:75"
val replace1: String = regex.replaceFirstIn(content, "99")
// 参二为函数 f:Matcher=>Option[String]
val replace2: String = regex.replaceSomeIn(content, m => Some((m.group(1).toInt+10).toString))
val replace3: String = regex.replaceAllIn(content, "99")
// 参二为函数 f:Matcher=>String
val replace4: String = regex.replaceAllIn(content, m => (m.group(1).toInt+10).toString))/*----------------------------------------------------------分组:必须添加 ()
*/
val regexPart = "\\d+".r
val cont = "112,334,453,229,4567"
val name: Option[String] = regexPart.findFirstIn(cont)	// Some(112)
val it: Regex.MatchIterator = regexPart.findAllIn(cont) // 112 334 453 229 4567Regex.Match match = regexXxx.findXxxMatchInt(content:String)
val groupContent = match.group(id:Int)val rtr = "(\\w+):(\\d+)"
val regex:Regex = rtr.r
val content = "java:88,mysql:80,scala:69,spark:75"
val name: Regex.Match = regexPart.findFirstMatchIn(cont)
val matches: Iterator[Regex.Match] = regex.findAllMatchIn(content)
matches.foreach(m=>println(s"${m.group(1)} => ${m.group(2)}"))/*练习一:使用正则表达式解析日志现有如下日志信息,请使用Scala正则表达式解析如下信息日志级别日期请求URIINFO 2016-07-25 requestURI:/c?app=0&p=1&did=18005472&industry=469&adid=31INFO 2016-07-26 requestURI:/c?app=0&p=2&did=18005473&industry=472&adid=31INFO 2016-07-27 requestURI:/c?app=0&p=1&did=18005474&industry=488&adid=32
*/

隐式类

/*隐式转换隐式参数:隐式传入场景:多个函数共享同一个参数,选择柯里化,将最后一个列表设计为该共享参数的唯一参数,并将该参数设置为 implicitimplicit order:Ordering[Int] = Ordering.Int.reverseval sorted = Array(8,1,3,2,5).sorted(implicit order:Ording[Int])隐式函数:隐式类型转换implicit def strToInt(str:String) = str.toIntval a:Int = "12"隐式类:扩展用implicit关键字修饰的类,扩展其主构造器唯一参数类型的功能只能在类、Trait、对象(单例对象、包对象)内部定义构造器只能携带一个非隐式参数隐式类不能是 case class在同一作用域内,不能有任何方法、成员或对象与隐式类同名隐式类必须有主构造器且只有一个参数
*/// 字符串的方法扩展,而在 Java 中 String 是final的,无法扩展
implicit class StrExt(str:String){def incr() = str.map(c=>(c+1).toChar)def isEmail = str.matches("\\w+@[a-z0-9]{2,10}\\.(com(.cn)?|cn|edu|org)")
}val a:String = "12665473@qq.com"
val incr: String = a.incr
val isEmail: Boolean = a.isEmail

异常处理 

/*Exception : compiling : try...catch...RuntimeTime : running : 用程序逻辑(分支结构)外部资源:释放 finally : try(resource extends AutoClosable)void close() throws Exception;
*/
try(// 此处声明并初始化的 AutoCloseable 资源会在使用完自动释放  
){// 代码块(非异常代码不放)
}catch(Exception ex){// 异常的捕获和处理
}try{// 代码块(非异常代码不放)
}catch(Exception ex){// 异常的捕获和处理
}finally {// 释放资源
}// 同 Java
def divideThrow(a:Int,b:Int) = {if(b==0){throw new Exception("divide by zero")}a/b
}// 同 Java + Optional
def divideTry(a:Int,b:Int):Option[Int] = {try{Some(a/b)}catch {case e:ArithmeticException => None}
}// scala 特有 Either[Left异常,Right正常]
def divideEither(a:Int,b:Int): Either[String,Int] = {try{Right(a/b)}catch {case e:ArithmeticException => Left("divide by zero")}
}// 案例
val e: Either[String, Int] = divideEither(1, 2)
val v = if(e.isLeft) e.left else e.right// 【推荐】
import scala.util.control.Exception.{allCatch,failAsValue}
// Option[V] => Some(V) : None
// V v = if(opt.isEmpty) defaultValue else opt.get
def divideOpt(a:Int,b:Int) = {allCatch.opt(a/b)
}
// Try[V] => Success(V) : Failure(Throwable)
def divideWithTry(a:Int,b:Int) = {allCatch.withTry(a/b)
}
// Either[Throwable,V] => Right(V) : Left(Throwable)
def divideEither(a:Int,b:Int) = {allCatch.either(a/b)
}
// 【推荐】参数1:异常类型,参数2:异常发生返回的值,参数3:正常返回的值
def divideFail(a:Int,b:Int) = {failAsValue(classOf[ArithmeticException])(-1)(a/b)
}

类型信息处理

case class Text(author:String,title:String,price:Float)
class TextSon(level:String,override val author:String,override val title:String,override val price:Float)
extends Text(author, title, price)
{val _level:String = leveloverride def toString() = s"TextSon{${super.toString}, ${_level}}"
}// 提取类型信息
val ci: Class[Text] = classOf[Text]val obj:Text = new TextSon("TOP","The Wild Roaring","张培元",86.32f)
// 类型判断
val isIns: Boolean = obj.isInstanceOf[TextSon]
// 类型转换:转换不当会导致 ClassCastException
val son: TextSon = obj.asInstanceOf[TextSon]
val son: Option[TextSon] = allCatch.opt(obj.asInstanceOf[TextSon])

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

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

相关文章

Electron+Vue3+ElectronForge整合 - 打包时整合 -分步打包

说明 本文介绍一下 Electron Vue3 的打包整合的基本操作。实现的效果是 : 1、一个正常的Vue3项目; 2、整合加入 Electron 框架 :开发时 Electron 加载的是开发的vue项目; 3、完成打包时整合:3.1 先完成vue3项目的正常…

Laravel 6 - 第十一章 中间件

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

Docker搭建NetBox

NetBox 是一个开源的数据中心基础设施管理(DCIM)和IP地址管理(IPAM)平台,用于管理网络设备、服务器、机架、端口、IP 地址和子网。它提供了一个直观的Web界面,允许用户跟踪资产、分配IP地址、规划网络架构以及生成报告。 实际应用场景 网络管理&#x…

http实现反向代理

http实现反向代理 需要安装http-proxy-middleware插件 npm i http-proxy-middleware准备proxy.html, 等会加载proxy.html可直接发起fetch请求 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equ…

深度解析:云计算的三宝——IaaS、PaaS和SaaS

4月22日&#xff0c;腾讯宣布旗下协作SaaS产品全面接入腾讯混元大模型&#xff0c;除去企业微信、腾讯会议、腾讯文档等“一门三杰”产品&#xff0c;腾讯乐享、腾讯电子签、腾讯问卷、腾讯云AI代码助手等协作SaaS产品也都已实现智能化升级。大模型应用落地再加速。 那么什么是…

Java基础入门day37

day37 js小案例 全选&#xff0c;全不选和反选 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…

2024年深圳杯东三省数学建模联赛A题论文首发第二种思路

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 问题一 数据转换&#xff1a; 首先&#xff0c;我们将监测站的经纬度坐标转换为基于米的笛卡尔坐标系。这是因为在地面上的大尺度距离…

HarmonyOS开发案例:【音乐播放器】

介绍 使用ArkTS语言实现了一个简易的音乐播放器应用&#xff0c;主要包含以下功能&#xff1a; 播放应用中的音频资源文件&#xff0c;并可进行上一曲、下一曲、播放、暂停、切换播放模式&#xff08;顺序播放、单曲循环、随机播放&#xff09;等操作。结合后台任务管理模块&…

使用python批量采集国家法律法规数据库——科学学习使用!遵守法律!绿色合规!

模块使用: 使用Python的requests模块进行网络请求操作。 目标网址: 国家法律法规数据库网址 实现步骤: 模拟浏览器请求: 设置请求头信息模拟浏览器行为。 请求网址并循环获取数据: 循环页面以获取数据&#xff0c;设置查询参数并使用requests.get()请求数据。 提取数据并保存文…

安全小课堂丨什么是暴力破解?如何防止暴力破解

什么是暴力破解&#xff1f; 暴力破解也可称为穷举法、枚举法&#xff0c;是一种比较流行的密码破译方法&#xff0c;也就是将密码进行一一推算直到找出正确的密码为止。比如一个6位并且全部由数字组成的密码&#xff0c;可能有100万种组合&#xff0c;也就是说最多需要尝试10…

JWT原理解析

一、概述 虽然现在很多的开发框架会支持JWT的使用&#xff0c;但是对JWT还是没有一个详细的了解&#xff0c;有很多疑惑&#xff1a; JWT比之前的session或者token有什么好处&#xff1f;JWT的构成元素是什么&#xff1f;JWT从生成到使用的详细流程&#xff1f; 二、 JWT 2…

SPI Flash and External SPI RAM(基于ESP32)

主要参考资料&#xff1a; 乐鑫ESP-IDF资料SPI Flash API: https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32s3/api-reference/peripherals/spi_flash/index.html 乐鑫ESP-IDF资料SPI Flash and External SPI RAM Configuration: https://docs.espressif.com/pro…

场景 - 分库分表

分什么 数据量大分表&#xff0c;并发大分库 分表字段如何选择 如果对交易订单进行分表&#xff0c;可以选择的东西很多&#xff0c;比如说商户id&#xff0c;用户id&#xff0c;地区等等 分表的时候要考虑到数据倾斜问题 数据倾斜 比如说按商户号进行分表&#xff0c;一共…

pnpm 安装后 node_modules 是什么结构?为什么 webpack 不识别 pnpm 安装的包?

本篇研究&#xff1a;使用 pnpm 安装依赖时&#xff0c;node_modules 下是什么结构 回顾 npm3 之前&#xff1a;依赖树 缺点&#xff1a; frequently packages were creating too deep dependency trees, which caused long directory paths issue on Windowspackages were c…

2024年 Flutter 面试题大全(持续更新中)

提示&#xff1a;页面中按 Ctrl F 查找关键字&#xff0c;点击链接跳转到详情 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#xff0c;51CTO专家博主。2023博客之星TOP153。 &#x1f…

Php 通过 FFmpeg 获取远程视频的时长和截图

突然发现 FFmpeg 这个软件还可以直接拉取远程视频的相关信息&#xff0c;也就是可以不通过下载视频到本地的方式&#xff0c;直接远程去获取视频时长和截图。 假设我们的视频url是&#xff1a;http://my.com/a.mp4 第一步&#xff0c;Linux 安装 FFmpeg 软件 第二步&#xf…

Day 20 Linux的WEB服务——apache

WEB服务简介 目前主流的web服务器软件 Linux&#xff1a;apache &#xff0c; nginx Windows-server&#xff1a;IIS 服务器安装nginx或apache后&#xff0c;叫做web服务器&#xff08;又称WWW服务器&#xff09; web服务器软件属于C/S框架模型 web服务器是一种被动程序只…

薄板样条插值TPS原理以及torch和opencv实现

薄板样条插值TPS原理以及torch和opencv实现 1、薄板样条插值TPS原理概述原理以及公式推导2、torch实现3、opencv实现1、薄板样条插值TPS原理 概述 薄板样条(Thin Plate Spline),简称TPS,是一种插值方法,可找到通过所有给定点的“最小弯曲”光滑曲面。因为它一般都是基于…

[Android]Jetpack Compose页面跳转和传值

一、页面跳转和返回 1.添加 Navigation 依赖 在你的 build.gradle &#xff08;Module&#xff09;文件中, 添加 Navigation Compose 依赖。 dependencies {implementation ("androidx.navigation:navigation-compose:2.5.3") } 2.创建跳转页面 接下来&#xff…

MQTT协议应用场景

MQTT协议应用场景 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;它设计用于低带宽、高延迟或不可靠的网络环境。由于其高效、简单和可靠性&#xff0c;MQTT在多种应用场景中得到了广泛的应用。…