Kotlin:如何获取字符串中“@”之后的字符?
Kotlin: How do I get characters after "@" in a string?
我有一个字符串,它是一封电子邮件。无论 string/email 是什么,我都希望能够获取电子邮件的域部分。本质上,我想在字符串的 @ 部分之后获取字符。例如,对于测试@kotlin.com,我在 kotlin.com 部分之后。
val emailString = "hello@world.com"
注意: brings up the point of using substringAfterLast
,这是一个非常有用的实用程序,但重要的是要记住它不能return null
而不是默认为提供的默认值(如果未指定任何内容,则这是原始字符串)。
我个人更喜欢处理 null
在无效输入是一个合理问题的情况下,而不是例如一个空字符串,因为它更清楚地表明未找到分隔符,这种特殊情况可以通过链接 ?:
、?.
、let
等轻松处理
下面是一个可能不需要的行为示例:
string | string.substringAfterLast("@")
-------------------------------------------------
"domain.com" | "domain.com" !
"@domain.com" | "domain.com"
"foo@domain.com" | "domain.com"
为了完整起见:
val string = "hello@world.com"
val index = string.indexOf('@')
val domain: String? = if (index == -1) null else string.substring(index + 1)
如果存在@
,则将@
之后的部分赋值给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)
}
然后你就可以做到
println("hello@world.com".domain)
您可以将此代码缩短为一行 let
:
string.indexOf('@').let { if (it == -1) null else string.substring(it + 1) }
这里是 similar question in Java。
虽然接受的答案没有任何问题,但 Kotlin 标准库值得探索,因为它包含不错的小方法,例如 substringAfterLast
可以将示例缩短为这个
val string = "hello@world.com"
val domain: String? = string.substringAfterLast("@")
下面的表达式描述的第二个子串是分隔符x
yourText.split('x')[1]
我有一个字符串,它是一封电子邮件。无论 string/email 是什么,我都希望能够获取电子邮件的域部分。本质上,我想在字符串的 @ 部分之后获取字符。例如,对于测试@kotlin.com,我在 kotlin.com 部分之后。
val emailString = "hello@world.com"
注意:substringAfterLast
,这是一个非常有用的实用程序,但重要的是要记住它不能return null
而不是默认为提供的默认值(如果未指定任何内容,则这是原始字符串)。
我个人更喜欢处理 null
在无效输入是一个合理问题的情况下,而不是例如一个空字符串,因为它更清楚地表明未找到分隔符,这种特殊情况可以通过链接 ?:
、?.
、let
等轻松处理
下面是一个可能不需要的行为示例:
string | string.substringAfterLast("@")
-------------------------------------------------
"domain.com" | "domain.com" !
"@domain.com" | "domain.com"
"foo@domain.com" | "domain.com"
为了完整起见:
val string = "hello@world.com"
val index = string.indexOf('@')
val domain: String? = if (index == -1) null else string.substring(index + 1)
如果存在@
,则将@
之后的部分赋值给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)
}
然后你就可以做到
println("hello@world.com".domain)
您可以将此代码缩短为一行 let
:
string.indexOf('@').let { if (it == -1) null else string.substring(it + 1) }
这里是 similar question in Java。
虽然接受的答案没有任何问题,但 Kotlin 标准库值得探索,因为它包含不错的小方法,例如 substringAfterLast
可以将示例缩短为这个
val string = "hello@world.com"
val domain: String? = string.substringAfterLast("@")
下面的表达式描述的第二个子串是分隔符x
yourText.split('x')[1]