如何使用Swift 2删除Strings中的多个空格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Swift 2删除Strings中的多个空格相关的知识,希望对你有一定的参考价值。

直到Swift 2我使用此扩展来删除多个空格:

func condenseWhitespace() -> String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty($0)})
        return " ".join(components)
}

但是现在我得到了Swift 2错误

无法使用类型'(String)'的参数列表调用'isEmpty'

我现在怎么能用Swift 2删除多个空格?日Thnx!

答案

在Swift 2中,join已成为joinWithSeparator,你在阵列上称它为。

filter中,应该在当前的迭代项isEmpty上调用$0

要用您的问题中的唯一空格字符替换空格和换行符:

extension String {
    func condenseWhitespace() -> String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
        return components.filter { !$0.isEmpty }.joinWithSeparator(" ")
    }
}

let result = "Hello  World.\nHello!".condenseWhitespace()  // "Hello World. Hello!"

因为您的函数不接受任何参数,所以您可以将其设为属性:

extension String {
    var condensedWhitespace: String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
        return components.filter { !$0.isEmpty }.joinWithSeparator(" ")
    }
}

let result = "Hello  World.\nHello!".condensedWhitespace  // "Hello World. Hello!"

在Swift 3中,还有更多变化。

功能:

extension String {
    func condenseWhitespace() -> String {
        let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)
        return components.filter { !$0.isEmpty }.joined(separator: " ")
    }
}

let result = "Hello  World.\nHello!".condenseWhitespace()

属性:

extension String {
    var condensedWhitespace: String {
        let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)
        return components.filter { !$0.isEmpty }.joined(separator: " ")
    }
}

let result = "Hello  World.\nHello!".condensedWhitespace

在Swift 4.2中,NSCharacterSet现在是CharacterSet,您可以省略并使用点语法:

extension String {
    func condenseWhitespace() -> String {
        let components = self.components(separatedBy: .whitespacesAndNewlines)
        return components.filter { !$0.isEmpty }.joined(separator: " ")
    }
}

let result = "Hello  World.\nHello!".condenseWhitespace()  // "Hello World. Hello!"
另一答案

SWIFT 3:更清洁的版本

extension String {
    var condensedWhitespace: String {
        let components = self.components(separatedBy: .whitespacesAndNewlines)
        return components.filter { !$0.isEmpty }.joined(separator: " ")
    }
}
另一答案

将字符串拆分为数组,然后再次加入非内存效率。它占用了大量的内存。在这种情况下,最好的方法是扫描给定的字符串并对其执行操作。正则表达式是扫描文本的先进方法。对于上述结论,解决方案如下:

Swift 4.x

extension String {

    func removeExtraSpaces() -> String {
        return self.replacingOccurrences(of: "[\\s\n]+", with: " ", options: .regularExpression, range: nil)
    }

}

使用

let startingString = "hello   world! \n\n I am   here!"
let processedString = startingString.removeExtraSpaces()
print(processedString)

输出:

processedString =>“你好世界!我来了!”

您可以根据自己的要求做更多事情,但我在这里指出的是使用带字符串的正则表达式而不是创建将消耗大量内存的数组。

另一答案

这是我的:它是如何实际运作的。

extension String {

    func removeExtraSpaces() -> String {
        var data  = ""
        var numberOfSpace = 0
        let items = self.getComponents(separatedBy: " ")
        for item in items{
            if item == " "{
                numberOfSpace = numberOfSpace + 1
            }else{
                numberOfSpace = 0
            }
            if numberOfSpace == 1 || numberOfSpace == 0 {
                data =  data + item
                //data.append(item)
            }
        }
        return data
    }
} 

使用

 var message = "What  is the    purpose   of life?"
 message = message.removeExtraSpaces()
 print(message)

输出:

生命的目的是什么?

另一答案

var str =“Hello World。

如果让正则表达式=尝试? NSRegularExpression(模式:“\ s +”,选项:NSRegularExpression.Options.case不敏感){

str = regex.stringByReplacingMatches(in:str,options:[],range:NSMakeRange(0,str.count),withTemplate:“”)

}

以上是关于如何使用Swift 2删除Strings中的多个空格的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中隐藏/删除空表视图行?

swift 删除排序数组中的重复项

带有“空”和 0...9 的 Swift UI 多个选择器

如何从 Dart 中的列表中删除空列表?

如何创建 OTP 验证屏幕并在多个 uitextfield 上向后检测删除是 Swift

mac下如何批量删除空文件夹