Dan*_*ond 9 string android substring string-interpolation kotlin
我有一个电子邮件的字符串.无论字符串/电子邮件是什么,我希望能够获得电子邮件的域名部分.基本上我想要在字符串的@部分之后抓住字符.例如,对于testing@kotlin.com,我在kotlin.com部分之后.
val emailString ="hello@world.com"
Iva*_*oll 23
虽然接受的答案没有任何问题,Kotlin标准库值得探索,因为它包含了很好的小方法,比如substringAfterLast缩短这个例子.
val string = "hello@world.com"
val domain: String? = string.substringAfterLast("@")
Run Code Online (Sandbox Code Playgroud)
Moi*_*ira 11
注意:Ivan Wooll 的回答提出了 using 的观点substringAfterLast,这是一个非常有用的实用程序,但重要的是要记住它不能返回null,而是默认为提供的默认值(这是原始字符串,如果未指定任何内容) )。
我个人更喜欢与负责null在情况下,无效的输入是一个合理的担忧,而不是如一个空字符串,因为它是一个更清晰的迹象表明,分隔符没有被发现,而这种特殊情况下,可以通过链接好办?:,?.,let,等。
以下是可能不受欢迎的行为的示例:
string | string.substringAfterLast("@")
-------------------------------------------------
"domain.com" | "domain.com" !
"@domain.com" | "domain.com"
"foo@domain.com" | "domain.com"
Run Code Online (Sandbox Code Playgroud)
只是为了完整性:
val string = "hello@world.com"
val index = string.indexOf('@')
val domain: String? = if (index == -1) null else string.substring(index + 1)
Run Code Online (Sandbox Code Playgroud)
这之后分配部分@给domain它是否存在,否则null。
对于学习,IntelliJ 的 Java -> Kotlin 转换器可能有用。
默认情况下,此快捷方式通常映射到Ctrl+ Alt+ Shift+ K。
您甚至可以将其设为扩展属性:
val String.domain: String?
get() {
val index = string.indexOf('@')
return if (index == -1) null else string.substring(index + 1)
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以做
println("hello@world.com".domain)
Run Code Online (Sandbox Code Playgroud)
您可以将此代码缩短为一行let:
string.indexOf('@').let { if (it == -1) null else string.substring(it + 1) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8454 次 |
| 最近记录: |