如何从字符串中删除空白字符集但保留单词之间的单个空格。我想要删除双空格、三空格等等…
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.
所有的功劳归功于NSHipster关于NSCharacterSet的文章。
兼容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(:)
函数。操作步骤如下:从字符串中获取一个 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):
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."
对于 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.
var string = "hello "
var trimmed = string.trim()
println(trimmed)// "hello"
CharacterSet.whitespacesAndNewlines
缩短为.whitespacesAndNewlines
。 - Martin R