我刚刚学scala,对于这门语言不熟悉。在scala中,如何快速地获取一个邮件地址中的域名(包括@)?例如对于xxx@gmail.com,需要获取到@gmail.com
新的需求是将邮箱的名字部分隐藏,也就是将abc@gmail.com变成******@gmail.com,在javascript里可以用正则实现,在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('@')
1 回答916 阅读✓ 已解决
1 回答946 阅读
1 回答897 阅读
举个例子:
说明:
()
是捕捉分组(?:)
是表示不分组m.group(0)
是匹配整个正则的字符串m.group(1)
是匹配@
前的字符m.group(2)
是匹配@
以及之后的字符