Intereting Posts
MyObjectBox не генерируется в kotlin (библиотека объектов) Объекты компаньона Котлина и отражение Какие версии kotlin следует использовать для Android Studio 3.0 Canary 1? Активность фрагмента фрагмента kotlin имеет вид с одинаковым идентификатором, это не нормально Синтаксис функции Kotlin kapt не разрешает генерируемые протобуфом классы Преобразование java-функции, которая использует байты для Kotlin Анимация не работает при сохранении в базе данных? Создание публичного экземпляра частного внутреннего класса в Котлине Контекст не может быть предоставлен без @ Provides- или @ Produces-аннотированного метода в kotlin Kotlin: Видимость статического вложенного класса Java, объявленного внутри невидимого класса Как правильно делать PATCH в строго типизированных языках на основе Spring – пример котлинское деление нулевых аргументов Kotlin Hibernate OneToOne fetchtype.LAZY немедленно запускает все запросы AES-шифрование. Различия между PHP и Kotlin \ Java

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("@")