Swift 4 Cocoa 读取格式化数据到变量
Swift 4 Cocoa reading formatted data into variable
我需要从字符串中读取一些格式化数据并将其存储在两个变量中。该字符串具有以下格式:
data = "(1234),(-567)"
数字的长度和符号各不相同。我觉得这应该很简单。在 C:
中很容易
scanf(data, "(%d),(%d)", num1, num2)
但在 Swift 中,我竭尽全力想找到一种简单的方法来做到这一点。正如其他答案中所建议的,我已经尝试过:
data.components(separatedBy: CharacterSet.decimalDigits.inverted)
然而,这忽略了减号。非常感谢任何帮助!
您可以在需要 scanf
类行为时使用 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")
}
我喜欢正则表达式:
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: [=10=].rangeAt(1))}
let nums = numstrings.map {Int([=10=])!} // I'm feeling lucky
// [1234, -567]
我需要从字符串中读取一些格式化数据并将其存储在两个变量中。该字符串具有以下格式:
data = "(1234),(-567)"
数字的长度和符号各不相同。我觉得这应该很简单。在 C:
中很容易scanf(data, "(%d),(%d)", num1, num2)
但在 Swift 中,我竭尽全力想找到一种简单的方法来做到这一点。正如其他答案中所建议的,我已经尝试过:
data.components(separatedBy: CharacterSet.decimalDigits.inverted)
然而,这忽略了减号。非常感谢任何帮助!
您可以在需要 scanf
类行为时使用 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")
}
我喜欢正则表达式:
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: [=10=].rangeAt(1))}
let nums = numstrings.map {Int([=10=])!} // I'm feeling lucky
// [1234, -567]