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.
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.
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
}
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
.
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
:
Tiré d'un KotlinConf présentation de Svetlana Isakova , co-auteur de "Kotlin in Action"