web-dev-qa-db-ja.com

Kotlinで機能しない文字列からのスペースの分割

誰もこれを疑問に思う?分割SPACE( "") kotlinで機能していません。異なる正規表現コードで試しましたが、まったく機能していません。

これで試してみました:

value.split("\\s")[0];
value.split("\\s+")[0];
value.split("\\s++")[0];

その後、私は解決策を考え出しました-> Create Javaこの関数を含み、kotlinクラスに文字列配列を返す定数クラス。

この問題を直接解決できる他の解決策はありますか?

解決策: @Edson Menegattiが言ったように:

KOTLIN固有:WORKING

values.split("\\s".toRegex())[0]

多くの人々がこの解決策を提案しました:NOT WORKING

values.split(" ")[0] 

しかし、私の場合は動作していませんです。

12
Babul Patel

JavaとKotlin実装の_String.split_の間の問題です。

Java実装は正規表現文字列を受け入れますが、Kotlinのものは受け入れません。それが機能するためには、実際のRegexオブジェクトを提供する必要があります。

そのためには、次のようにコードを更新します。

_value.split("\\s".toRegex())[0];
_

また、@ Thomasが示唆したように、通常のスペース文字を使用して文字列を次のように分割できます。

_value.split(" ")[0];
_

最後に、分割リストの最初の要素のみを使用している場合は、_[0]_の代わりにfirst()を使用することを検討することをお勧めします。パフォーマンスを向上させます。

19
Edson Menegatti

あなたが使用する必要があります:

.toRegex()

_fun main(args: Array<String>) {
        val str = "Kotlin com"

        val separate1 = str.split("\\s".toRegex())[0]
        println(separate1) // ------------------> Kotlin
}
_

[〜#〜] or [〜#〜]

.split(" ")[0]を使用して結果を達成することもできます。お気に入り

_fun main(args: Array<String>) {
            val str = "Kotlin com"

            val separate1 = str.split(" ")[0]
            println(separate1) // ----------> Kotlin
}
_
6
Nikunj

String#split (実際にはCharSequence#split)は、正規表現、または文字通り解釈される文字列のいずれかを取ることができます。そう:

value.split(" ")[0]

あなたがしたいことをします。

最初の要素のみを使用している場合は、limit = 2も渡す方が効率的です。または、さらに良いことに substringBefore を使用します。

2
Thomas

Kotlinは、JavaのStringライブラリにあるいくつかの問題を解決しようとします。たとえば、Kotlinはより明示的にしようとします。

その結果、 split メソッドは通常のStringを受け取り、内部的に正規表現として使用しません。

_"hello world".split("\\s")[0] //no match
"hello world".split(" ")[0] // => "hello"
_

実際に正規表現を取るオーバーロードされたsplit関数を明示的に使用するには、toRegex()拡張を使用できます(inline fun String.toRegex(): Regex (source)):

_"hello world".split("\\s".toRegex())[0]// => "hello"
_

以下は、混乱する_String::replaceAll_メソッドを解決するKotlinの別の例を示しています。

enter image description here

KotlinConf Svetlana Isakovaのプレゼンテーション から取られた、「Kotlin in Action」の共著者

1
s1m0nw1