从Swift字符串中仅移除尾部空格

7

在Stack Overflow中,许多示例都修复了前导和尾随部分。我的请求仅涉及尾随部分。

我的输入文本是:" keep my left side "

期望的输出结果是:" keep my left side"

当然,这个命令将删除两端:

let cleansed = messageText.trimmingCharacters(in: .whitespacesAndNewlines)

那对我来说不起作用。

我该怎么做呢?


rangeOfCharacter(from: .whitespaceAndNewlines.inverted) 怎么样? - jtbandes
4个回答

10

一种非常简单的解决方案是使用正则表达式,匹配模式为在字符串末尾($)有一个或多个空白字符(\s)。

let string = " keep my left side "
let cleansed = string.replacingOccurrences(of: "\\s+$", 
                                         with: "", 
                                      options: .regularExpression)

2

您可以使用字符串的rangeOfCharacter函数与字符集一起使用。如果有多个空格要修剪,该扩展将使用递归。如果通常只有少量空格,则这将非常有效。

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)

返回

"1234"


1

在vadian的回答基础上,我发现在编写Swift 3代码时需要包含一个范围参数。因此:

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
}

0

简单。不需要正则表达式。

extension String {

    func trimRight() -> String {
        let c = reversed().drop(while: { $0.isWhitespace }).reversed()
        return String(c)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接