Scala | 正则表达式 案例-手机号打码

19 阅读1分钟

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

1.从根目录下读出address.txt 的内容

2.找到其中的合法的手机号,把中间4位(3-4-4)用*代替

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

创建 adress.txt & address_new.txt

屏幕截图 2025-12-24 153815.png

1.从根目录下读出address.txt 的内容

// 1.从根目录下读出address.txt 的内容
val content = scala.io.Source.fromFile("address.txt").mkString

println("读到的文件内容如下:")
println(content)

2.找到其中的合法的手机号,把中间4位(3-4-4)用*代替

// 2.找到其中的合法的手机号,把中间4位(3-4-4)用*代替
    val reg = "(1[356789]\d\d)(\d{4})(\d{3})".r

    val newContent = reg.replaceAllIn(content, ele=> {
      println(ele.group(0))
      println(ele.group(1))
      println(ele.group(2))
      println(ele.group(3))

      ele.group(1) + "****" + ele.group(3)
    })
    println("替换后的内容如下:")
    println(newContent)

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

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

完整代码

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[356789]\d{9}".r
    val reg = "(1[356789]\d\d)(\d{4})(\d{3})".r

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

    // 在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()
      // println(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()
  }

}

运行结果

屏幕截图 2025-12-24 160001.png

屏幕截图 2025-12-24 160007.png