String 如何在Swift中删除字符串中的空格?

String 如何在Swift中删除字符串中的空格?,string,swift,whitespace,String,Swift,Whitespace,这很有效 let replaced = String(map(aString.generate()) { $0 == " " ? "-" : $0 }) 但事实并非如此 let replaced = String(map(aString.generate()) { $0 == " " ? "" : $0 }) 为什么?您正在映射,因此应该保留元素的数量。在第二种情况下,删除元素。即使将“替换为--,示例也将失败 您可能更喜欢使用过滤器: let replaced = Stri

这很有效

let replaced = String(map(aString.generate()) {
    $0 == " " ? "-" : $0 })
但事实并非如此

let replaced = String(map(aString.generate()) {
    $0 == " " ? "" : $0 })

为什么?

您正在映射,因此应该保留元素的数量。在第二种情况下,删除元素。即使将
替换为
--
,示例也将失败

您可能更喜欢使用
过滤器

let replaced = String(filter(aString.generate()) { $0 != " "})

枚举字符串会产生一个字符序列,因此
$0
在 闭包的类型为
字符
。这就编译了

{ $0 == " " ? "-" : $0 }
因为在此上下文中,
“-”
被解释为字符文本 因此与
$0
类型相同。但是

{ $0 == " " ? "" : $0 }
不编译,因为
不是字符文本(并且在条件表达式
a?b:c
中,操作数
b
c
必须具有相同的类型)

您可以通过将
$0
转换为字符串来解决此问题:

{ $0 == " " ? "" : String($0) }
但是现在映射返回一个字符串数组 一组字符的数组。所以相反 对于
String()
构造函数,您必须加入结果:

let replaced = "".join(map(aString) { $0 == " " ? "" : String($0) })
// Swift 2 / Xcode 7:
let replaced = "".join(aString.characters.map({ $0 == " " ? "" : String($0) }))
(请注意,不需要显式调用
generate()

当然,同样的结果也可以通过

// Before Swift 3.0
let replaced = aString.stringByReplacingOccurrencesOfString(" ", withString: "")

// After Swift 3.0
let replaced = aString.replacingOccurrences(of: " ", with: "")

如果要删除字符串前后的空格(这在用户输入表单中非常有用),可以使用:

let replaced = aString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
您也可以将其直接应用于文本字段。

试试这个:

let strArray0 = strArray1.map { $0.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()) }

希望这对您有所帮助

如果您想从字符串中删除空白,那么只需使用stringByReplacingOccurrencesOfString函数传递字符串,如下所示

let replacedString = string.replacingOccurrences(of: " ", with: "")
对于文本字段,可以直接应用UITextField的对象

let replacedString = textField.text!.replacingOccurrences(of: " ", with: "")

这应在Swift 2.2中起作用:

let replaced = String(aString.characters.filter {$0 != " "})
在Swift 3.0中,执行以下操作

func RemoveWhiteSpace(aString:String) -> String
    {
        let replaced = aString.trimmingCharacters(in: NSCharacterSet.whitespaces)
        return replaced
    }
像这样使用

let nonWhiteSpaceStr = self.RemoveWhiteSpace(aString: "I have white Space        ")

如果您想删除
字符串中任何位置的所有空白
,我确实为Swift 3.0提供了此解决方案:

或者更好(您需要对序列进行通用扩展):

您还可以替换任何其他字符集的
NSCharacterSet.whitespaces和newlines

NSCharacterSet.controlCharacters
NSCharacterSet.whitespaces
NSCharacterSet.whitespacesAndNewlines
NSCharacterSet.decimalDigits
NSCharacterSet.letters
NSCharacterSet.lowercaseLetters
NSCharacterSet.uppercaseLetters
NSCharacterSet.nonBaseCharacters
NSCharacterSet.alphanumerics
NSCharacterSet.decomposables
NSCharacterSet.illegalCharacters
NSCharacterSet.punctuationCharacters
NSCharacterSet.capitalizedLetters
NSCharacterSet.symbols
NSCharacterSet.newline

之前的答案对我来说都不够快,所以我使用Swift 5得出了以下结论:

let nonWhitespaceString = String(whitespaceString.compactMap({ $0.isWhitespace ? nil : $0 })

对于Swift 5

" spaces here ".replacingOccurrences(of: " ", with: "")
返回:

"spaceshere"

我使用了带空格的数字,我不知道为什么,但是这个变体删除了十进制数字中的空格,谢谢!
let nonWhitespaceString = String(whitespaceString.compactMap({ $0.isWhitespace ? nil : $0 })
" spaces here ".replacingOccurrences(of: " ", with: "")
"spaceshere"