NSScannerクラスをSwift2.1で少し使ってみました
NSScannerクラスをSwift2.1で少し使ってみました。NSScannerクラスは、規則的な文字列を最初から順番に検索するのに役立つかなと思いました。わかったところまで記事にします。
下記のサイトを参考にしました。
実行環境
- Swift 2.1.1
NSScannerクラスって?
NSScannerクラスは、文字列を最初から最後まで順番にスキャン(文字列比較)し続けるクラスです。文字列と数字を分割したりできます。
まずは使ってみる
-
数字をスキャン
let str = "18 years old."
let scanner = NSScanner(string: str)
var age: Int = 0
scanner.scanInteger(&age)
print(age)
// 18 -
同じ文字列までスキャン
let source = "This is a pen"
let scanner = NSScanner(string: source)
var str: NSString?
scanner.scanUpToString(" a", intoString: &str)
print(str!)
// This is
スキャンして、スキャンする
一度スキャンしたら、そのスキャンした次の文字がスキャン開始位置になります。
scanUpTo~~メソッドでスキャンしたら、次のスキャン開始位置はscanUpTo~~メソッドで指定した文字列の先頭になります。
let source = "This is a pen."
let scanner = NSScanner(string: source)
let str1, str2 NSString?
scanner.scanString("This", intoString: &str1)
scanner.scanUpToString(".", intoString: &str2)
print("str1:\(str1!) str2:\(str2!)")
// str1:This str2:is a pen
// スキャン開始位置は「.」
let scanner = NSScanner(string: source)
let str1, str2 NSString?
scanner.scanString("This", intoString: &str1)
scanner.scanUpToString(".", intoString: &str2)
print("str1:\(str1!) str2:\(str2!)")
// str1:This str2:is a pen
// スキャン開始位置は「.」
This と is の間にはスペースがあるのに、str2の結果の先頭にスペースがありません。これは、This がスキャンされた後の開始位置が 「is」の「i」 になっているためです。デフォルトでは、空白スペースと改行はスキャン開始位置を決める際にスキップされます。