web-dev-qa-db-ja.com

Kotlin:文字列で「@」の後に文字を取得するにはどうすればよいですか?

メールという文字列があります。文字列/メールが何であれ、メールのドメイン部分を取得できるようにしたい。基本的に、文字列の@部分の後の文字を取得したいと思います。たとえば、testing @ kotlin.comの場合、私はkotlin.comの部分の後です。

val emailString = "[email protected]"

9
Daniel Dramond

完全を期すために:

val string = "[email protected]"

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("[email protected]".domain)

let を使用して、このコードを1行に短縮できます。

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

Ivan Woollの回答substringAfterLast を使用するという意味を持ちますが、これはnullを返すことはできません。


編集:コメントのアドレスを指定すると、できませんJavaとKotlinを同じファイルで使用します。ただし、同じプロジェクトが正常に機能します。


これが Javaでの同様の質問 です。

4
Moira

受け入れられた回答には何の問題もありませんが、Kotlin標準ライブラリにはsubstringAfterLastのような素敵な小さなメソッドが含まれているため、探索する価値があります。

val string = "[email protected]"

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

次の式は、2番目のサブストリングが区切り文字xであることを示しています

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