如何从字符串中删除空格字符集,但保留单词之间的单个空格?我想删除两个空格和三个空格,等等。
发布于 2014-11-17 10:11:38
Swift 3
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.
传统Swift
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.
发布于 2015-10-12 19:50:13
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
发布于 2015-12-19 21:20:29
当您有Objective-C/Foundation背景时,将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."
然而,对于Swift,还有另一种真正有效的方法,它不需要您导入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."
https://stackoverflow.com/questions/26963379
复制相似问题