Kotlin:如何获取字符串中“@”后面的字符?

我有一个字符串,是一个电子邮件。 我希望能够得到电子邮件的域名部分,不管字符串/电子邮件是什么。 基本上我想要获得@字符串后面的字符。 例如,对于testing@kotlin.com,我在kotlin.com部分之后。

val emailString =“hello@world.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转换器可能是有用的。

快捷键是,IIRC, 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) 

让你可以将这段代码缩短为一行:

 string.indexOf('@').let { if (it == -1) null else string.substring(it + 1) } 

Ivan Wooll的答案提出了使用substringAfterLast的观点,尽管这不能返回null


编辑:解决你的评论,你不能在同一个文件中使用Java和Kotlin。 但是,在同一个项目中使用它们可以正常工作。


Java中有一个类似的问题 。

尽管接受的答案没有什么错,Kotlin标准库是值得探索的,因为它包含了像substringAfterLast这样的很好的小方法,这将缩短这个例子

 val string = "hello@world.com" val domain: String? = string.substringAfterLast("@")