从Kotlin的字符串列表中删除单词

时间:2019-04-02 04:03:40

标签: android kotlin

我有一个可变的字符串列表,我正在尝试从每个字符串中删除一个单词。问题是我不相信从每一行中都删除了这个词。

    for (item in stringLines) {

        when {

            item.contains("SUMMARY") -> eventLines.add(item)
            item.contains("DTSTART") -> startDateLines.add(item)
            item.contains("DTEND") -> endDateLines.add(item)
            //item.contains("URL:") -> locationLines.add(item)
            //item.contains("CATEGORIES") -> categoriesLines.add(item)
    }

    }

    for (item in eventLines) {

        when{
            item.contains("SUMMARY") -> item.removePrefix("SUMMARY")
        }

    }

字符串是

SUMMARY WINTER FORMAL

我需要

WINTER FORMAL

,但是无论出于什么原因都没有出现。我知道如何在Java中执行此操作,但是我不知道如何在Kotlin中执行此操作,并且找不到任何能够完成此操作的函数。我想念什么?

3 个答案:

答案 0 :(得分:3)

removePrefix仅在字符串的特定部分为前缀的情况下才将其删除。显然,这不是您的情况。您可以执行splitfilterjoin序列以产生预期的结果。

println("SUMMARY WINTER FORMAL".split(" ").filter { it != "SUMMARY" }.joinToString(" ")) 
//output : "WINTER FORMAL"

但是,如果您有多个连续的空格,它们将在输出中变成一个空格。如果“ SUMMARY”没有被空格包围,例如“ SUMMARYWINTERFORMAL”将不会更改。

您可以通过将其替换为空字符串来删除部分字符串,但是请注意,这会保留所有周围的字符,包括周围的空格。

println("SUMMARY WINTER FORMAL".replace("SUMMARY",""))
//output : " WINTER FORMAL"

请注意,“冬季”前面有一个空格

如果您不希望包含空格,则使用正则表达式可以:

println("SUMMARY WINTER FORMAL".replace("\\s*SUMMARY\\s*".toRegex(),""))
//output : "WINTER FORMAL"
println("SUMMARYWINTERFORMAL".replace("\\s*SUMMARY\\s*".toRegex(),""))
//output : "WINTERFORMAL"
println("  SUMMARY  WINTER FORMAL".replace("\\s*SUMMARY\\s*".toRegex(),""))
//output : "WINTER FORMAL"

您甚至可以修改正则表达式以更好地适合您的用例。

答案 1 :(得分:3)

Kotlin(和Java)中的字符串是不可变的。因此item.removePrefix返回一个新的字符串,您必须更新列表或创建一个新列表,如下所示:

for (item in eventLines) {

    when {
        item.contains("SUMMARY") -> 
            eventLinesWithPrefixRemoved.add(item.removePrefix("SUMMARY"))
        else -> eventLinesWithPrefixRemoved.add(item)
    }

}

答案 2 :(得分:0)

如果您只想从字符串中删除“ SUMMARY”,则可以使用这种情况

val l = listOf("SUMMARY WINTER FORMAL", "SUMMARY FORMAL", "WINTER FORMAL", "SUMMARY WINTER")

    println(
        l.map {
            it.split(" ")
                .filter { s -> s != "SUMMARY" }
                .joinToString(" ")
        }
    ) // puts [WINTER FORMAL, FORMAL, WINTER FORMAL, WINTER]