想要更多,那就“多继承”

markdown 复制代码
目标:手机号打码
*          136612345678  ->  136****5678
* 任务:从文本文件中,读取一段内容,把其中的手机号识别出来,并打码

先建立一个文本文件

scss 复制代码
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读入进来的内容是:")
    println(content)

//    写一个手机号的正则
    val reg = "1[35678]\d{9}".r
//    匹配输出
    reg.findAllIn(content).foreach(println)
  }
replaceAllIn,全部替换
ini 复制代码
   替换:正则的典型的应用场景
    val newContent = reg.replaceAllIn(content,"这有个手机号")
更改后:
scss 复制代码
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读入进来的内容是:")
    println(content)

//    写一个手机号的正则
    val reg = "1[35678]\d{9}".r
////    匹配输出
//    reg.findAllIn(content).foreach(println)
////    替换:正则的典型的应用场景
//    replaceAllIn,全部替换
//    在content中通过正则去找字符串,找到了之后,就换成指定的内容,并把最终的结果保存到newContent
//    val newContent = reg.replaceAllIn(content,"这有个手机号")
    val newContent = reg.replaceAllIn(content,m =>{
//      println(s"在replaceAllIn函数中,找到的内容是:${mat}")
//      "手机号:" + m
//      m的前三位 + "****" + m的后四位
      m.toString().substring(0,3) + "****" + m.toString().substring(7)
    })

    println("替换后的内容是:")
    println(newContent)
  }
---------------------------------------------------------------------------------------------------------
再次优化后
scss 复制代码
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读入进来的内容是:")
    println(content)

//    写一个手机号的正则
    val reg = "(1[35678]\d{2})(\d{3})(\d{4})".r
////    匹配输出
//    reg.findAllIn(content).foreach(println)
////    替换:正则的典型的应用场景
//    replaceAllIn,全部替换
//    在content中通过正则去找字符串,找到了之后,就换成指定的内容,并把最终的结果保存到newContent
//    val newContent = reg.replaceAllIn(content,"这有个手机号")
    val newContent = reg.replaceAllIn(content,m =>{
      println(m.group(0))// 当前正则匹配到完整的内容
      println(m.group(1))// 当前正则的第一个分组(第一个小括号)匹配到的内容
      println(m.group(2))
      println(m.group(3))

      m.group(1) + "***" + m.group(3)
    })

    println("替换后的内容是:")
    println(newContent)
  
    
//    把替换之后的内容,写入到一个新的文件中
    val fileWriter = new FileWriter("newAddress.txt")
    fileWriter.write(newContent)
    fileWriter.close() 
  }
}
相关推荐
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
怕浪猫4 天前
ZCode 开源了来看看这是个什么东西
node.js·github·代码规范
Liaiyang665 天前
# 自研 AST 容错初筛工具:横向评测 Django、PyTorch、TensorFlow 三大开源 Python 框架异常收容风险
python·测试工具·自动化·开源软件·代码规范·devops·代码复审
kisshyshy6 天前
从Props透传到自定义Hook:系统梳理React跨层级通信与逻辑复用
前端·架构·代码规范
Flynt8 天前
阿里开源的 AI 代码评审工具,我喂了 5 个坑,一个没漏
开源·ai编程·代码规范
这个DBA有点耶10 天前
数据库教程:从零基础到实战的完整学习路径(2026版)
数据库·程序员·代码规范
这个DBA有点耶10 天前
自增主键用尽了怎么办?INT溢出、在线迁移与预防策略全解析
数据库·mysql·代码规范
学渣超12 天前
记一次复杂业务功能重构——从过程式长链路,到模板方法构建体系
java·架构·代码规范
天涯浪客13 天前
我的漏洞扫描器,把被测项目的源码写坏了
代码规范
事圆则缓13 天前
遗留项目改造实战指南:从可读性、代码质量到性能和 AI 约束
android·ai·代码规范