无法从字符串数组中删除空格

Posted

技术标签:

【中文标题】无法从字符串数组中删除空格【英文标题】:Trouble removing whitespaces from string array 【发布时间】:2021-12-22 19:33:44 【问题描述】:

刚开始在这里和 Kotlin 提问,

我正在为命令行应用程序制作一个简单的命令解析器。我处理输入,但在空格处拆分字符串,但它可能会导致“空数组索引”。这是我目前尝试删除它的代码,但是控制台永远不会打印“找到空白”,所以我不太确定如何去做。

var input = readLine()?.trim()?.split(" ")

        input = input?.toMutableList()
        println(input)
        if (input != null) 
            for(i in input)
                println("Checked")
                if(i == " ")
                    println("Found Whitespace")
                    if (input != null) 
                        input.removeAt(input.indexOf(i))
                    
                
            
        
        println(input)

这是一个命令的控制台,该命令将第一个数字重复第二个数字

repeat   5  5 // command
[repeat, , , 5, , 5]  //what the array looks like before whitespace removal
Checked
Checked
Checked
Checked
Checked
Checked
[repeat, , , 5, , 5] //what the array looks like after whitespace removal

希望这是有道理的......

【问题讨论】:

您不应该检查"" 而不是" " 吗?无论如何,从字符串本身中删除多余的空格可能会更好,或者使用正则表达式更好地分割(包括多个空格)。 您希望数组最后的样子如何? @HenryTwist 是的,检查 "" 有效,现在实​​际上很有意义 【参考方案1】:

如果你想用连续的空格作为分隔符来分割字符串,你可以使用正则表达式。

val input = readLine()
if(input != null) 
    val words = input.trim().split(Regex(" +")) // here '+' is used to capture one or more consecutive occurrences of " "
    println(words)

Try it yourself

【讨论】:

【参考方案2】:

这里有一些错误,

您正在使用 forEach 迭代数组并删除索引,这可能会导致 IndexOutOfBoundError 或其他一些模棱两可的行为。

你可以在这里使用filter

val a = listOf(" " ," " ," " ," " ,"1" ,"2" ,"3")
print( a.filterit != " " )

返回

[1, 2, 3]

playground

【讨论】:

感谢您的帮助!这对我来说效果很好,但我认为用正则表达式分割字符串会更干净一些。非常感谢

以上是关于无法从字符串数组中删除空格的主要内容,如果未能解决你的问题,请参考以下文章

从C中的字符串/字符数组中删除空格的函数

根据字符的字符从句子数组中删除重复句子的最佳方法,空格无关紧要

从找到空格和标点符号的数组中删除字符[重复]

如何从 char 数组中清除单个字符?

如何从字符串中删除所有非希伯来字符并将单词放入数组中?

将字符串转换为数组后从字符串中删除特定项目