Scala 补充 正则、异常处理...
Scala 补充 正则、异常处理…
基于前几篇文章 (Scala介绍与环境搭建、Scala 第一篇 基础篇、Scala 第二篇 算子篇、Scala 第三篇 OOP篇) 补充
一、正则
1、匹配
简单匹配
1
2
3
4// 判断content是否为数字
val content: String = "244"
val regexStr: String = "\\d+"
val bool = content.matches(regexStr)查找:模式匹配,对象提取:【元组,样例类】
1
2
3
4
5
6
7
8
9
10// 将字符串 content 中的数字和逗号分隔的数字序列解析成一个三元组,如果字符串不符合指定格式则返回一个包含三个 "INVALID" 字符串的三元组。
import scala.util.matching.Regex
val regex: Regex = "(\\d+),(\\d+),(\\d+)".r // r 函数:将正则字符串转化为 正则(Regex) 对象
val content: String = "12665473,33,33"
val tp3: (String, String, String) = content match {
case regex(g1, g2, g3) => (g1, g2, g3)
case _ => ("INVALID", "INVALID", "INVALID")
}
println(tp3) // 输出结果:(12665473,33,33)
2、替换
replaceFirstIn
用替换字符串替换原始字符串中第一个匹配到的文本,并返回替换后的新字符串。replaceSomeIn
对原始字符串中所有匹配到的文本进行处理,根据传入的匹配函数,选择性地进行替换或保留,并返回替换后的新字符串。replaceAllIn
将原始字符串中所有匹配到的文本都替换为指定的替换字符串,并返回替换后的新字符串。
使用样例
1 |
|
输出
1 |
|
3、分割
1 |
|
4、分组
分组:必须添加 ()
findFirstMatchIn
findAllMatchIn
样例
1 |
|
输出
1 |
|
5、练习
练习一:使用正则表达式解析日志
现有如下日志信息,请使用Scala正则表达式解析如下信息
1
2
3
4>日志级别 日期 请求URI
>INFO 2016-07-25 requestURI:/c?app=0&p=1&did=18005472&industry=469&adid=31
>INFO 2016-07-26 requestURI:/c?app=0&p=2&did=18005473&industry=472&adid=31
>INFO 2016-07-27 requestURI:/c?app=0&p=1&did=18005474&industry=488&adid=32
代码
1 |
|
输出
1 |
|
二、异常处理
try...catch...
1
2
3
4
5
6
7
8
9import scala.util.control.Exception
try {
// 可能会抛出异常的代码
} catch {
case e: ArithmeticException => // 处理 ArithmeticException 的代码
// 其他类型的异常处理
} finally {
// 无论是否有异常发生,都会执行的代码
}scala.util.control.Exception.{allCatch, failAsValue}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import scala.util.Try
import scala.util.control.Exception.{allCatch, failAsValue}
// 尝试执行可能会抛出异常的代码块,返回Option[Int],如果异常发生则返回None
val resultOption: Option[Int] = allCatch.opt(10 / 0)
// 返回Try[Int],如果异常发生则返回一个包含异常的Failure
val resultTry: Try[Int] = allCatch.withTry(10 / 0)
// 返回Either[Throwable, Int],如果异常发生则返回包含异常的Left
val resultEither: Either[Throwable, Int] = allCatch.either(10 / 0)
// 如果异常发生则返回指定的默认值
// 【推荐】参数1:异常类型,参数2:正常返回的值,参数3:异常发生返回的值
val resultWithDefaultValue: Int = failAsValue(classOf[ArithmeticException])(10 / 0)(-1)
三、类 型信息处理
classOf[] 提取类型信息
isInstanceOf[] 类型判断
asInstanceOf[] 类型转换
1 |
|
1 |
|
Scala 补充 正则、异常处理...
https://leaf-domain.gitee.io/2024/05/16/bigdata/scala/scala04/