Swift:没有特殊函数的字符串

时间:2016-05-20 15:56:42

标签: swift date expression

我正在搜索用于转换字符串的内置函数 “01092030”(格式“[[dd] hh] mmss”)四个单独的整数。

  • dd => 01
  • hh => 09
  • mm => 20
  • ss => 30

dd和hh是可选的。如果缺少它们应该是0.我可以通过开发一个特殊函数来实现它,但我喜欢使用类似正则表达式的东西。

2 个答案:

答案 0 :(得分:3)

我没有看到你的“内置函数”或“正则表达式”要求的重点,但无论如何......

let s = "092030" as NSString
let pattern = "\\d\\d"
let reg = try! NSRegularExpression(pattern: pattern, options: [])
let matches = reg.matchesInString(s as String, options: [], range: NSMakeRange(0, s.length))
var result = matches.map {s.substringWithRange($0.range)}
while result.count < 4 {
    result.insert("0", atIndex: 0)
}
// result is: ["0", "09", "20", "30"]

我对你的输出要求也有点不清楚。一方面,你说你想要四个“个体整数”。但“09”不是整数;它是一个表示整数的字符串。所以在我看来你真的想要字符串。如果是,则result是期​​望的结果。如果没有,那么您还需要一个步骤:

let result2 = result.map{Int($0)!}
// result2 is: [0, 9, 20, 30]

答案 1 :(得分:1)

由于字符串包含日期组件,您可以使用NSDateFormatter

let string  = "01092030"

let dateFormatter = NSDateFormatter()
let dayMissing = string.characters.count < 8
let hourMissing = string.characters.count < 6
dateFormatter.dateFormat = hourMissing ? "mmss" : dayMissing ? "HHmmss" : "ddHHmmss"
let date = dateFormatter.dateFromString(string)!
let components = NSCalendar.currentCalendar().components([.Day, .Hour, .Minute, .Second], fromDate: date)
let second = components.second
let minute = components.minute
let hour = components.hour
let day = dayMissing ? 0 : components.day