Kotlin: Как получить символы после «@» в строке?

У меня есть строка, которая является электронной почтой. Я хочу иметь возможность получить доменную часть сообщения электронной почты независимо от того, какая строка / электронная почта. По сути, я хочу получить символы после @ части строки. Например, для test@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 . По умолчанию он возвращает строку.


    Для обучения может быть полезен конвертер Java -> Kotlin IntelliJ.

    Ярлык: 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) 

    Вы можете сократить этот код до одной строки с let :

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

    Ответ Ивана Вулла поднимает смысл использования substringAfterLast , хотя это не может вернуть значение null .


    Изменить: обращаясь к вашему комментарию, вы не можете использовать Java и Kotlin в том же файле. Однако использование их в одном проекте отлично.


    Вот аналогичный вопрос в Java .

    Хотя нет ничего плохого в принятом ответе, стандартная библиотека Kotlin стоит изучить, поскольку в ней содержатся интересные небольшие методы, такие как substringAfterLast которые сократят пример до этого

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