【问题标题】:Swift 4 Cocoa reading formatted data into variableSwift 4 Cocoa 将格式化数据读入变量
【发布时间】:2017-11-12 01:37:42
【问题描述】:

我需要从字符串中读取一些格式化数据并将其存储在两个变量中。该字符串具有以下格式:

data = "(1234),(-567)"

数字有不同的长度和符号。我觉得这应该很简单。在 C 中会很容易:

scanf(data, "(%d),(%d)", num1, num2)

但在 Swift 中,我正在努力寻找一种简单的方法来做到这一点。正如其他答案中所建议的,我已经尝试过:

data.components(separatedBy: CharacterSet.decimalDigits.inverted)

但是,这忽略了减号。非常感谢任何帮助!

【问题讨论】:

    标签: swift cocoa formatted-input


    【解决方案1】:

    当你需要scanf-like行为时,你可以使用Scanner

    let data = "(1234),(-567)"
    
    var num1: CInt = 0
    var num2: CInt = 0
    let scanner = Scanner(string: data)
    if
        scanner.scanString("(", into: nil),
        scanner.scanInt32(&num1),
        scanner.scanString("),(", into: nil),
        scanner.scanInt32(&num2),
        scanner.scanString(")", into: nil)
    {
        print(num1, num2)
    } else {
        print("failed")
    }
    

    【讨论】:

      【解决方案2】:

      我喜欢正则表达式:

      let data = "(1234),(-567)"
      let pattern = "\\((.*?)\\)"
      let reg = try! NSRegularExpression(pattern: pattern)
      let result = reg.matches(in: data, options: [], 
          range: NSMakeRange(0, data.utf16.count))
      let numstrings = result.map {(data as NSString).substring(with: $0.rangeAt(1))}
      let nums = numstrings.map {Int($0)!} // I'm feeling lucky
      // [1234, -567]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-19
        • 2018-12-25
        • 1970-01-01
        相关资源
        最近更新 更多