首页 > scala提取邮件地址的域名部分

scala提取邮件地址的域名部分

我刚刚学scala,对于这门语言不熟悉。在scala中,如何快速地获取一个邮件地址中的域名(包括@)?例如对于xxx@gmail.com,需要获取到@gmail.com

新的需求是将邮箱的名字部分隐藏,也就是将abc@gmail.com变成******@gmail.com,在javascript里可以用正则实现,在scala里有什么好方法吗?


可以使用抽取器

object Email{
    def apply(user:String, domain: String) = user + "@" + domain
    def unapply(str: String): Option[(String, String)] = {
        val parts = str split "@"
        if (parts.length == 2) Some(parts(0), parts(1)) else None
    }
}

"Delphin@qq.com" match {case Email(user, domain) => println(s"Username is ${user}, domain is ${domain}")}

对问题和回答都无力吐槽。给个传统的做法,还能报告异常情况。

val email = "hello@example.com"
val bad = "hello_bad.com"
val idxOfAt = email.indexOf('@')
if (idxOfAt > 0) {
  email.substring(idxOfAt, email.length)
} else {
  throw new IllegalArgumentException("No correct @!")
}
bad.indexOf('@')

正则表达式。。可以使用grep正则表达在的语法: """[a-zA-Z0-9](@[a-zA-Z0-9-.])""".r


val r = """([_A-Za-z0-9-]+(?:\.[_A-Za-z0-9-\+]+)*)(@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*(?:\.[A-Za-z]{2,})) ?""".r

举个例子:

r.replaceAllIn("abc.edf+jianli@gmail.com   hello@gmail.com.cn", (m => "*****" + m.group(2)))
// 会输出 :
// String = *****@gmail.com  *****@gmail.com.cn

说明:


email.replaceFirst(".*?(?=@)", "*****")


val email = "xxx@gmail.com"

val domain = "@" + a.split("@")(1)

【热门文章】
【热门文章】