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

44 阅读1分钟

matchs方法

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

val 结果 = 正则.matches(目标字符串)

其中的结果是一个bool值。

来看一个简单的的例子。

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

    }

}

replaceAllin正则替换

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

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

来,我们看一个简单的例子:把目标字符串中的字符BC换成01。 【示例】

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

案例-手机号打码

任务:把手机号的中间4-7位打马赛克,再输出。

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

package reg

import java.io.FileWriter

object reg4 {
  def main(args: Array[String]): Unit = {
    val content=scala.io.Source.fromFile("address.txt").mkString

    println("读到的文件内容如下:")
    println(content)
    val reg="(1[356789]\d\d)(\d{4})(\d{3})".r

    //在content中,把所有正则找到的内容,换成"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()
//
//      "手机号前三位"+"****"+"手机号后四位"
//      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()

    }

}

image.png