Scala中的正则表达式(二)应用-手机号打码

39 阅读1分钟

matchs方法

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

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

其中的结果是一个bool值。

replaceAllin正则替换

[a-zA-Z]:明确限定用户名的首字符只能是大小写字母中的任一个,筛选掉不符合开头规范的情况。

[a-zA-Z0-9_]{5,11}:表示后续字符可以是大小写字母、数字、下划线,且总长度要在 5 到 11位之间(加上开头的 1 个字母,整体用户名长度就在 6 到 12 位),以此保证用户名有合适的长度且字符构成合规。这里使用花括号限定重复次数范围,确保长度约束生效。

代码

package reg

import java.io.FileWriter

object reg4 {
  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\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())

      // "手机号前3位" + "****" +phone.substring(7)
      // phone.substring(0, 3) + "****" + phone.substring(7)
      ele.group(1) + "-****-" + ele.group(3)
    })
    println("替代后的内容如下:")
    println(newContent)
    // 3. 把替代之后的内容写入到address_new.txt文件中
    val fileWhiter = new FileWriter("address_new.txt")
    fileWhiter.write(newContent)
    fileWhiter.close()
  }
}

image.png