Swift 仅从字符串中删除尾随空格
Swift remove ONLY trailing spaces from string
SO 中的许多示例都在固定两侧,前导和尾随。我的要求只是关于尾随。
我的输入文字是:“Keep my left side”
期望的输出:“保持我的左侧”
当然这个命令会去掉两端:
let cleansed = messageText.trimmingCharacters(in: .whitespacesAndNewlines)
这对我不起作用。
我该怎么做?
一个非常简单的解决方案是正则表达式,模式是字符串末尾的一个或多个(+
)个空白字符(\s
)($
)
let string = " keep my left side "
let cleansed = string.replacingOccurrences(of: "\s+$",
with: "",
options: .regularExpression)
您可以对带有字符集的字符串使用 rangeOfCharacter 函数。然后,此扩展使用 trim 的多个空格的递归。如果您通常只有少量空格,这将很有效。
extension String {
func trailingTrim(_ characterSet : CharacterSet) -> String {
if let range = rangeOfCharacter(from: characterSet, options: [.anchored, .backwards]) {
return self.substring(to: range.lowerBound).trailingTrim(characterSet)
}
return self
}
}
"1234 ".trailingTrim(.whitespaces)
returns
"1234"
基于我在撰写本文时发现 Swift 3 的 vadian 回答,我必须包含一个范围参数。所以:
func trailingTrim(with string : String) -> String {
let start = string.startIndex
let end = string.endIndex
let range: Range<String.Index> = Range<String.Index>(start: start, end: end)
let cleansed:String = string.stringByReplacingOccurrencesOfString("\s+$",
withString: "",
options: .RegularExpressionSearch,
range: range)
return cleansed
}
简单。不需要正则表达式。
extension String {
func trimRight() -> String {
let c = reversed().drop(while: { [=10=].isWhitespace }).reversed()
return String(c)
}
}
SO 中的许多示例都在固定两侧,前导和尾随。我的要求只是关于尾随。 我的输入文字是:“Keep my left side” 期望的输出:“保持我的左侧”
当然这个命令会去掉两端:
let cleansed = messageText.trimmingCharacters(in: .whitespacesAndNewlines)
这对我不起作用。
我该怎么做?
一个非常简单的解决方案是正则表达式,模式是字符串末尾的一个或多个(+
)个空白字符(\s
)($
)
let string = " keep my left side "
let cleansed = string.replacingOccurrences(of: "\s+$",
with: "",
options: .regularExpression)
您可以对带有字符集的字符串使用 rangeOfCharacter 函数。然后,此扩展使用 trim 的多个空格的递归。如果您通常只有少量空格,这将很有效。
extension String {
func trailingTrim(_ characterSet : CharacterSet) -> String {
if let range = rangeOfCharacter(from: characterSet, options: [.anchored, .backwards]) {
return self.substring(to: range.lowerBound).trailingTrim(characterSet)
}
return self
}
}
"1234 ".trailingTrim(.whitespaces)
returns
"1234"
基于我在撰写本文时发现 Swift 3 的 vadian 回答,我必须包含一个范围参数。所以:
func trailingTrim(with string : String) -> String {
let start = string.startIndex
let end = string.endIndex
let range: Range<String.Index> = Range<String.Index>(start: start, end: end)
let cleansed:String = string.stringByReplacingOccurrencesOfString("\s+$",
withString: "",
options: .RegularExpressionSearch,
range: range)
return cleansed
}
简单。不需要正则表达式。
extension String {
func trimRight() -> String {
let c = reversed().drop(while: { [=10=].isWhitespace }).reversed()
return String(c)
}
}