Swift从字符串中删除仅有尾随空格

时间:2016-12-31 22:38:57

标签: string swift3 nscharacterset

很多SO中的例子都是固定双方,领先和尾随。我的要求只是关于尾随。 我的输入文字是:“保持我的左侧” 期望的输出:“保持我的左侧”

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

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

这对我不起作用。

我该怎么做?

4 个答案:

答案 0 :(得分:10)

一个非常简单的解决方案是正则表达式,模式是字符串末尾的一个或多个(+)空格字符(\s)($)< / em>的

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

答案 1 :(得分:2)

您可以在string上使用rangeOfCharacter函数和characterSet。然后,此扩展使用递归来修剪多个空格。如果您通常只有少量空格,这将是有效的。

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"

答案 2 :(得分: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
}

答案 3 :(得分:0)

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

extension String {

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