Kotlin:尝试拆分多个空格时的奇怪行为[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我想在多个空格上拆分一个字符串。

我试过这样:

val s = "aa        q"

val words = s.split("\\s+").also { println(it) } //prints an array with the original string itself (as opposed to 2 strings)

println(words.size) //prints 1 

如果我在Java中使用相同的正则表达式拆分字符串,我得到预期的结果:一个包含两个字符串的数组,"aa""q"

(这是在intellij的Kotlin repl上尝试过的)

string kotlin read-eval-print-loop
1个回答
2
投票

尝试使用toRegex()或toPattern()

val s = "aa        q"

val words = s.split("\\s+".toRegex()).also { println(it) } // print [aa, q]

println(words.size) //prints 2 

这是描述功能的link to kotlin

@Test
fun useRegex() {
    //given
    val s = "aa       q"
    //when
    val words = s.split("\\s+".toRegex()).also { println(it) }  // print [aa, q]
    //then
    assertEquals(2, words.size)
    assertEquals("aa", words[0])
    assertEquals("q", words[1])
}

@Test
fun usePattern() {
    //given
    val s = "aa       q"
    //when
    val words = s.split("\\s+".toPattern()).also { println(it) } // print [aa, q]
    //then
    assertEquals(2, words.size)
    assertEquals("aa", words[0])
    assertEquals("q", words[1])
}



@Test
fun useDelimiters() {
    //given
    val s = "aa       q"
    //when
    val words = s.split("\\s+").also { println(it) }  // you find \s+ this is not regexp this is string not found then return [aa       q]
    val words2 = s.split("       ").also { println(it) }  // you must use correctly  number of spaces print [aa, q]
    //then
    assertEquals(1, words.size)
    assertEquals("aa       q", words[0])
    assertEquals(s, words[0])

    assertEquals(2, words2.size)
    assertEquals("aa", words2[0])
    assertEquals("q", words2[1])
}
© www.soinside.com 2019 - 2024. All rights reserved.