web-dev-qa-db-fra.com

Fractionner l'espace de la chaîne ne fonctionne pas dans Kotlin

Quelqu'un se demande cela? Fractionnement SPACE ("") dans kotlin ne fonctionne pas, j'ai essayé avec différents codes regex mais ne fonctionne pas du tout.

Essayé avec ceci:

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

Ensuite, j'ai trouvé une solution -> Créer Java classe constante qui contient cette fonction et renvoie le tableau de chaînes à votre classe kotlin.

Y a-t-il une autre solution à ce problème où nous pouvons directement réaliser cette chose?

Solution: Comme l'a dit @Edson Menegatti:

Spécifique à KOTLIN: FONCTIONNEMENT

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

Beaucoup de gens ont suggéré cette solution: NE FONCTIONNE PAS

values.split(" ")[0] 

Mais dans mon cas, c'est ne fonctionne pas.

12
Babul Patel

Voici un problème entre le Java et l'implémentation Kotlin de String.split.

Alors que l'implémentation Java accepte une chaîne d'expression régulière, celle de Kotlin ne le fait pas. Pour que cela fonctionne, vous devez fournir un véritable objet Regex.

Pour ce faire, vous devez mettre à jour votre code comme suit:

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

De plus, comme @Thomas l'a suggéré, vous pouvez simplement utiliser le caractère espace régulier pour diviser votre chaîne avec:

value.split(" ")[0];

Dernier point, si vous n'utilisez que le premier élément de la liste fractionnée, vous voudrez peut-être envisager d'utiliser first() au lieu de [0] - pour une meilleure lisibilité - et de définir le paramètre de limite à 2 - pour de meilleures performances.

19
Edson Menegatti

Vous devez utiliser:

.toRegex ()

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

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

OU

Vous pouvez également utiliser .split(" ")[0] pour obtenir un résultat. Comme

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

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

String#split (en fait CharSequence#split) peut prendre soit une expression régulière, soit juste une chaîne qui est interprétée littéralement. Donc:

value.split(" ")[0]

fait ce que vous voulez.

Si vous utilisez uniquement le premier élément, il est plus efficace de passer également limit = 2. Ou, encore mieux, utilisez substringBefore .

2
Thomas

Kotlin essaie de résoudre certains problèmes de la bibliothèque String de Java. Par exemple, Kotlin essaie d'être plus explicite.

Par conséquent, la méthode split prend un String normal et ne l'utilise pas comme expression régulière en interne:

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

Pour utiliser explicitement la fonction split surchargée qui prend réellement une expression régulière, l'extension toRegex() peut être utilisée (inline fun String.toRegex(): Regex (source)):

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

L'exemple suivant montre un autre exemple de Kotlin résolvant la méthode déroutante String::replaceAll:

enter image description here

Tiré d'un KotlinConf présentation de Svetlana Isakova , co-auteur de "Kotlin in Action"

1
s1m0nw1