【问题标题】:Most efficient way to remove leading zeros from Swift 3 string从 Swift 3 字符串中删除前导零的最有效方法
【发布时间】:2017-11-06 19:34:29
【问题描述】:

我有一个字符串,例如“00123456”,我想在字符串“123456”中包含前导零。

我找到了用于 Objective-C 的 severalexamples,但不确定使用 Swift 3 的最佳方法。

谢谢

【问题讨论】:

  • 好问题!此外,要检查这一点,您必须使用 async.main 队列中的 CPU 时间来证明

标签: swift3 substring leading-zero


【解决方案1】:

你可以用正则表达式做到这一点

let string = "00123456"
let trimmedString = string.replacingOccurrences(of: "^0+", with: "", options: .regularExpression)

好处是没有双重转换,也没有强制展开。

【讨论】:

    【解决方案2】:

    只需将字符串转换为 int,然后再转换回字符串。它将删除前导零。

    let numberString = "00123456"
    let numberAsInt = Int(numberString)
    let backToString = "\(numberAsInt!)"
    

    结果:“123456”

    【讨论】:

    • 小心强制解包:确保字符串不为空 (""),即带有保护语句。否则这段代码会崩溃。
    • 在这种情况下,定义了字符串,因此它永远不会为零。但是是的,如果字符串是动态的,则必须处理它以保护 nil 值。
    • 如果结果数字太大,这将失败。
    • 为什么这被标记为正确,这显然不是正确的类型安全决定。
    【解决方案3】:

    首先,创建 Validator 然后在任何类中使用它。 这是一个例子,它有效:) 这是swift 4.0

    class PhoneNumberExcludeZeroValidator {
        func validate(_ value: String) -> String {
            var subscriberNumber = value
            let prefixCase = "0"
            if subscriberNumber.hasPrefix(prefixCase) {
                subscriberNumber.remove(at: subscriberNumber.startIndex)
            }
            return subscriberNumber
        }
    }
    

    使用示例:

    if let countryCallingCode = countryCallingCodeTextField.text, var subscriberNumber = phoneNumberTextField.text {
    
         subscriberNumber = PhoneNumberExcludeZeroValidator().validate(subscriberNumber)
    
              let phoneNumber = "\(countryCallingCode)\(subscriberNumber)"
              registerUserWith(phoneNumber: phoneNumber)
    }
    

    【讨论】:

    • 这只会删除第一个 0。如果有人输入 0011234 那么它将是:011234
    【解决方案4】:
    let number = "\(String(describing: Int(text)!))"
    

    【讨论】:

    • 为什么不直接使用"\(Int(text)!)"String(Int(text)!)?使用字符串插值从字符串创建字符串是多余的。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 2019-10-15
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2015-08-16
    • 2015-11-11
    相关资源
    最近更新 更多