web-dev-qa-db-fra.com

Kotlin: Comment obtenir des caractères après "@" dans une chaîne?

J'ai une chaîne qui est un e-mail. Je veux pouvoir obtenir la partie domaine de l'e-mail, quelle que soit la chaîne/l'e-mail. Essentiellement, je veux mettre la main sur les caractères après la partie @ de la chaîne. Par exemple, pour [email protected], je suis après la partie kotlin.com.

val emailString = "[email protected]"

9
Daniel Dramond

Juste pour être complet:

val string = "[email protected]"

val index = string.indexOf('@')

val domain: String? = if (index == -1) null else string.substring(index + 1)

Cela affecte la pièce après @ à domain s'il existe, sinon null. Par défaut, il renvoie la chaîne elle-même.


Pour l'apprentissage, le convertisseur Java -> Kotlin d'IntelliJ peut être utile.

Le raccourci est, IIRC, Ctrl+Alt+Shift+K.

Vous pouvez même en faire une propriété d'extension:

val String.domain: String?
    get() {
        val index = string.indexOf('@')
        return if (index == -1) null else string.substring(index + 1)
    }

et alors vous pourriez faire

println("[email protected]".domain)

Vous pouvez raccourcir ce code sur une ligne avec let :

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

réponse d'Ivan Wooll évoque l'utilisation de substringAfterLast , bien que cela ne puisse pas renvoyer null.


Edit: en adressant votre commentaire, vous ne pouvez pas utiliser Java et Kotlin dans le même fichier. Cependant, en les utilisant dans le même projet fonctionne très bien.


Voici une question similaire en Java .

4
Moira

Bien qu'il n'y ait rien de mal avec la réponse acceptée, la bibliothèque standard de Kotlin mérite d'être explorée car elle contient de jolies petites méthodes comme substringAfterLastqui raccourciraient l'exemple à ceci

val string = "[email protected]"

val domain: String? = string.substringAfterLast("@")
23
Ivan Wooll

L'expression suivante décrit la deuxième sous-chaîne comme le caractère délimiteur x

yourText.split('x')[1]
0
CORONEL Braian