正则表达式应用-手机号打码

1. matchces函数的使用方法

(一)matchs方法 正则表达式对象有matches方法,它的作用是验证给定的字符串是否满足正则表达式的要求。它的格式如下:

val 结果 = 正则.matches(目标字符串) 其中的结果是一个bool值。

【例】

scala 复制代码
import scala.util.matching.Regex

object RegexDemo {

    def main(args: Array[String]) {

        val reg1 = "\\d{3}".r

        println(reg1.matches("123")) // true

        println(reg1.matches("12a")) // false

    }

}

2. replaceAllIn的使用方法

(三)replaceAllin正则替换

功能:对目标字符中的内容,进行正则查找,对找到的内容使用指定的内容进行替换,并返回替换之后的字符串。

格式:正则.replaceAll(目标字符串, 匹配到的内容 => 要替换的内容 )

【示例】:把目标字符串中的字符BC换成01。

("bc".r).replaceAll("abcdabcd" => m => "01" )

案例-手机号打码

用到的方法是:正则匹配分组 + replaceAllIn。

案例文件如下

scala 复制代码
package reg

import java.io.FileWriter

object reg04 {
  def main(args: Array[String]): Unit = {
    // 1.从根目录下读出address,txt 的内容
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    // 2. 找到其中的合法手机号,把中间4位(3-4-4)用*代替
    val reg = "1[031902]\d{9}".r

//    println("找到的合法手机号如下:")
//    reg.findAllIn(content).foreach(ele=>println(ele))

    // 在content中,把所有通过正则找到的内容,换成"abc"
//    reg.replaceAllIn(content, ele => "abc")
    val newContent = reg.replaceAllIn(content,ele =>{
      val phone = ele.toString()
      println(ele)
      "abc"
//      "手机号前3位" +"****"+ "手机号后四位"
      phone.substring(0 ,3) + "****" + phone.substring(7)
    })
    println("替换后的内容如下:")
    println(newContent)

    // 3.把结果写入到address_new.txt文件中
    val fileWriter = new FileWriter("address_new.txt")
    fileWriter.write(newContent)
    fileWriter.close()
  }

}
以下为添加了group版:
scala 复制代码
package reg

import java.io.FileWriter

object reg06 {
  def main(args: Array[String]): Unit = {
    // 1.从根目录下读出address,txt 的内容
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    // 2. 找到其中的合法手机号,把中间4位(3-4-4)用*代替
    val reg = "(1[031902]\d\d)(\d{4})(\d{3})".r

//    println("找到的合法手机号如下:")
//    reg.findAllIn(content).foreach(ele=>println(ele))

    // 在content中,把所有通过正则找到的内容,换成"abc"
//    reg.replaceAllIn(content, ele => "abc")
    val newContent = reg.replaceAllIn(content,ele =>{
      println(ele.group(0))
      println(ele.group(1))
      println(ele.group(2))
      println(ele.group(3))

//      val phone = ele.toString()
//      println(ele)
//      "abc"
//      "手机号前3位" +"****"+ "手机号后四位"
//      phone.substring(0 ,3) + "****" + phone.substring(7)
      ele.group(1) + "-****-" + ele.group(3)
    })
    println("替换后的内容如下:")
    println(newContent)

    // 3.把结果写入到address_new.txt文件中
    val fileWriter = new FileWriter("address_new.txt")
    fileWriter.write(newContent)
    fileWriter.close()
  }
}
注:

():是分组

println(ele.group(0/1/2/3...))固定表示匹配到的全部内容

括号里的数字(1,2,3)顺序对应着正则表达式中,()包含的内容

这里的group是分组的意思,它与正则表达式中的()是一一对应的。

3. 正则表达式的应用

以下是把文件中的内容换成'abc'
scala 复制代码
package reg

import java.io.FileWriter

object reg05 {
  def main(args: Array[String]): Unit = {
    // 1.从根目录下读出address,txt 的内容
    val content = scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    // 2. 找到其中的合法手机号,把中间4位(3-4-4)用*代替
    val reg = "1[031902]\d{9}".r

//    println("找到的合法手机号如下:")
//    reg.findAllIn(content).foreach(ele=>println(ele))

    // 在content中,把所有通过正则找到的内容,换成"abc"
    reg.replaceAllIn(content, ele => "abc")
    val newContent = reg.replaceAllIn(content,ele =>{
      println(ele)
     "abc"
//      "手机号前3位" +"****"+ "手机号后四位"
    })
    println("替换后的内容如下:")
    println(newContent)

    // 3.把结果写入到address_new.txt文件中
  }

}
相关推荐
深兰科技2 天前
深兰科技受邀参与第二届中国(南宁)—东盟人工智能场景应用对接会,深化AI国际合作
人工智能·qt·r语言·scala·symfony·智能机器人·深兰科技
开开心心就好6 天前
低年级识字练笔顺工具,电脑和安卓端都能用
前端·javascript·网络·安全·scala·erlang·语音识别
开开心心就好8 天前
清理此电脑网盘图标工具,开源免费好用
网络·网络协议·tcp/ip·智能手机·电脑·scala·erlang
典典分享指南11 天前
用结构化数据管理产品知识库
scala·bash·batch·actionscript
Thomas214314 天前
scala 闭包
开发语言·后端·scala
江畔柳前堤14 天前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
Thomas214322 天前
Java scala 数组 链表
java·链表·scala
江畔柳前堤24 天前
消息队列:从直觉到精通的完整认知地图
开发语言·人工智能·算法·机器学习·ruby on rails·scala
hopsky1 个月前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy0712132 个月前
scala playframework 搭建与新建controller教程
scala