Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从Kotlin中的字符串列表中删除单词_Android_Kotlin - Fatal编程技术网

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

Android 从Kotlin中的字符串列表中删除单词,android,kotlin,Android,Kotlin,我有一个可变的字符串列表,我试图从每个字符串中删除一个单词。问题是我不相信每一行都会删除这个词 for (item in stringLines) { when { item.contains("SUMMARY") -> eventLines.add(item) item.contains("DTSTART") -> startDateLines.add(item) item.cont

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

    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中做到这一点,我找不到任何能够实现这一点的函数。我缺少什么?

removePrefix
仅当字符串的特定部分是前缀时才删除该部分。显然,这不是你的情况。您可以执行
拆分
筛选
加入
序列以产生预期结果

println("SUMMARY WINTER FORMAL".split(" ").filter { it != "SUMMARY" }.joinToString(" ")) 
//output : "WINTER FORMAL"
但是如果有多个连续的空间,它们将成为输出中的一个空间。此外,如果“SUMMARY”没有被空格包围,例如“SUMMARYWINTERFORMAL”不会更改,则此方法也不起作用

您可以通过用空字符串替换来删除字符串的一部分,但请注意,这将保留任何周围的字符,包括周围的空格

println("SUMMARY WINTER FORMAL".replace("SUMMARY",""))
//output : " WINTER FORMAL"
请注意,“WINTER”前面有一个空格

如果不希望包含空格(如果有),则使用正则表达式即可:

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"
您可以进一步修改正则表达式以更好地适应您的用例。

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

for (item in eventLines) {

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

}

如果只想从字符串中删除“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]

下面是一个提示,供将来使用,用java编写代码并粘贴到android studio中,它会要求将其转换为kotlin,只需按yes。它在大多数情况下适用于小代码块。我不知道它们不能更改,谢谢!