【发布时间】:2015-01-13 19:34:01
【问题描述】:
如何从字符串中删除空白字符集,但保留单词之间的单个空格。我想删除双空格和三空格等...
【问题讨论】:
标签: string swift whitespace
如何从字符串中删除空白字符集,但保留单词之间的单个空格。我想删除双空格和三空格等...
【问题讨论】:
标签: string swift whitespace
extension String {
func condensingWhitespace() -> String {
return self.components(separatedBy: .whitespacesAndNewlines)
.filter { !$0.isEmpty }
.joined(separator: " ")
}
}
let string = " Lorem \r ipsum dolar sit amet. "
print(string.condensingWhitespace())
// Lorem ipsum dolar sit amet.
NSCharacterSet 让这一切变得简单:
func condenseWhitespace(string: String) -> String {
let components = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!isEmpty($0)})
return join(" ", components)
}
var string = " Lorem \r ipsum dolar sit amet. "
println(condenseWhitespace(string))
// Lorem ipsum dolar sit amet.
或者如果您希望它作为String 扩展名:
extension String {
func condenseWhitespace() -> String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty($0)})
return " ".join(components)
}
}
var string = " Lorem \r ipsum dolar sit amet. "
println(string.condenseWhitespace())
// Lorem ipsum dolar sit amet.
【讨论】:
CharacterSet.whitespacesAndNewlines 可以缩短为 .whitespacesAndNewlines。
Swift 2 兼容代码:
extension String {
var removeExcessiveSpaces: String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
let filtered = components.filter({!$0.isEmpty})
return filtered.joinWithSeparator(" ")
}
}
用法:
let str = "test spaces too many"
print(str.removeExcessiveSpaces)
// Output: test spaces too many
【讨论】:
componentsSeparatedByCharactersInSet(:) 与 Swift 一起使用,以便从多余的空白字符中删除您的字符串。这里的步骤是从您的字符串中获取一个 String 数组,其中所有空白字符都已替换为空字符串,将此数组过滤到一个新的 String 数组中,其中所有空字符串都已被删除,然后将此数组的所有字符串连接成一个新字符串,同时用空格字符分隔它们。
下面的 Playground 代码展示了如何做到这一点:
import Foundation
let string = " Lorem ipsum dolar sit amet. "
let newString = string
.componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
.filter { !$0.isEmpty }
.joinWithSeparator(" ")
print(newString) // prints "Lorem ipsum dolar sit amet."
如果需要重复此操作,可以将代码重构为String 扩展:
import Foundation
extension String {
func condenseWhitespace() -> String {
return componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
.filter { !$0.isEmpty }
.joinWithSeparator(" ")
}
}
let string = " Lorem ipsum dolar sit amet. "
let newString = string.condenseWhitespace()
print(newString) // prints "Lorem ipsum dolar sit amet."
Foundation。这里的步骤是从您的字符串中获取一个 String.CharacterView 数组,其中所有空白字符都已被删除,将此数组 String.CharacterView 映射到一个 String 数组并连接此数组的所有字符串插入一个新字符串,同时用空格字符分隔它们。
下面的 Playground 代码展示了如何做到这一点:
let string = " Lorem ipsum dolar sit amet. "
let newString = string.characters
.split { $0 == " " }
.map { String($0) }
.joinWithSeparator(" ")
print(newString) // prints "Lorem ipsum dolar sit amet."
如果需要重复此操作,可以将代码重构为String 扩展:
extension String {
func condenseWhitespace() -> String {
return characters
.split { $0 == " " }
.map { String($0) }
.joinWithSeparator(" ")
}
}
let string = " Lorem ipsum dolar sit amet. "
let newString = string.condenseWhitespace()
print(newString) // prints "Lorem ipsum dolar sit amet."
【讨论】:
对于 swift 3.1
extension String {
var trim : String {
get {
return characters
.split { $0 == " " || $0 == "\r" }
.map { String($0) }
.joined(separator: " ")
}
}
}
let string = " Lorem \r ipsum dolar sit amet. "
print(string.trim)
将输出:
Lorem ipsum dolar sit amet.
【讨论】:
另一种选择是使用正则表达式搜索来替换所有 单个空格出现一个或多个空白字符。 示例(斯威夫特 3):
let string = " Lorem \r ipsum dolar sit amet. "
let condensed = string
.replacingOccurrences(of: "\\s+", with: " ", options: .regularExpression)
.trimmingCharacters(in: .whitespacesAndNewlines)
print(condensed.debugDescription) // "Lorem ipsum dolar sit amet."
【讨论】:
您可以在我写的 https://bit.ly/JString 的 Swift 字符串扩展中使用 trim() 方法。
var string = "hello "
var trimmed = string.trim()
println(trimmed)// "hello"
【讨论】:
"hello________there"(用下划线表示空格)