当前位置:  开发笔记 > 编程语言 > 正文

在Swift 3中仅修剪字符串末尾的空格

如何解决《在Swift3中仅修剪字符串末尾的空格》经验,为你挑选了5个好方法。

Swift中修剪字符串的每个示例都会删除前导和尾随空格,但是如何删除尾随空格?

例如,如果我有一个字符串:

"    example  "

我怎么能最终得到:

"    example"

我发现的每个解决方案都显示trimmingCharacters(in: CharacterSet.whitespaces),但我想保留领先的空白.

RegEx是一种可能性,或者可以导出一个范围来确定要删除的字符索引,但我似乎无法为此找到一个优雅的解决方案.



1> Martin R..:

使用正则表达式:

let string = "    example  "
let trimmed = string.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression)
print(">" + trimmed + "<")
// >    example<

\s+匹配一个或多个空白字符,并$匹配字符串的结尾.



2> Demosthese..:

在Swift 4中

var trailingSpacesTrimmed: String {
    var newString = self

    while newString.last?.isWhitespace == true {
        newString = String(newString.dropLast())
    }

    return newString
}



3> Obliquely..:

这个简短的Swift 3字符串扩展使用rangeOfCharacter的.anchored和.backwards选项,然后在需要循环时递归调用自身.因为编译器期望将CharacterSet作为参数,所以您可以在调用时提供静态,例如"1234 ".trailing(.whitespaces)将返回"1234".(我没有做过计时,但是期望比正则表达更快.)

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
    }
}



4> Raphael..:

Foundation你可以匹配正则表达式的索引范围.您也可以替换子范围.结合这个,我们得到:

import Foundation
extension String {
    func trimTrailingWhitespace() -> String {
        if let trailingWs = self.range(of: "\\s+$", options: .regularExpression) {
            return self.replacingCharacters(in: trailingWs, with: "")
        } else {
            return self
        }
    }
}

你也可以有一个变异版本:

import Foundation
extension String {
    mutating func trimTrailingWhitespace() {
        if let trailingWs = self.range(of: "\\s+$", options: .regularExpression) {
            self.replaceSubrange(trailingWs, with: "")
        }
    }
}

如果我们匹配\s*(正如Martin R.先做的那样),我们可以跳过if let防守并强制解开可选项,因为总会有匹配.我认为这更好,因为它显然是安全的,并且如果你改变正则表达式仍然是安全的.我没有考虑性能.



5> TimBigDev..:

Handy String扩展在Swift 4中

extension String {

    func trimmingTrailingSpaces() -> String {
        var t = self
        while t.hasSuffix(" ") {
          t = "" + t.dropLast()
        }
        return t
    }

    mutating func trimmedTrailingSpaces() {
        self = self.trimmingTrailingSpaces()
    }

}

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有