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()
}
}