2016-05-20 4 views
-2

私は4つの個々の整数に 「01092030」(フォーマット「[[DD] HH] MMSS」)のような文字列を変換するためのビルドイン機能を探しています。スウィフト:特殊機能なしのint型への文字列

  • DD => 01
  • HH => 09
  • ミリメートル=> 20
  • SS => 30

DDとHHはオプションです。行方不明の場合は0にする必要があります。私は特別な関数を開発することでそれを行うことができますが、正規表現のようなものを使用したいと思います。私はあなたの「ビルドイン機能」や「正規表現」の要件が、何のポイントが表示されていない

+1

なぜ「私は、ビルドイン機能を探してる」を使用することができますか?あなたはコードを書いたくありませんか? "しかし、私は正規表現のようなものを使うのが好きですが、あなたがそれを行うことができたとしても、まだコードを書くでしょう。あなたの「特別な機能なし」の注意点は何ですか? – matt

+0

なぜ正規表現を使用しますか?いずれの場合でも、正規表現かどうかにかかわらず、そのコードはそれ自身の関数に属します。 – Alexander

+0

私は、このケースでは特別な実装ではなく、柔軟な定義を使用したいと考えています。私は文字列の各位置を段階的にチェックする機能を持っています。しかし、マットのソリューションは私にとってよりエレガントに見えます。 – Peter71

答えて

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 
+0

ブリリアント。私のニーズにもマッチします。ありがとうございました – Peter71

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"] 

は、私はまた、あなたの出力要件にほとんど不明確です。一方では、4つの「個別の整数」が必要だと言うでしょう。しかし、 "09"は整数ではありません。これは整数を表す文字列です。だから、実際には弦がほしいと思うようです。その場合は、resultが望ましい結果になります。ない場合は、一歩必要があります。

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

はい、そうです。 09は、0が9に属し、結果が9であることを示すはずです。解決策は優れています!正確に私が検索したもの(intへの変換を含む)。なぜ "パターン"の使用は必要ではありません(これは正規表現です)? – Peter71

関連する問題