読者です 読者をやめる 読者になる 読者になる

使って創ってApp

ソフトウェアを使ったり作ったりするブログです

NSScannerクラスをSwift2.1で少し使ってみました

NSScannerクラスをSwift2.1で少し使ってみました。NSScannerクラスは、規則的な文字列を最初から順番に検索するのに役立つかなと思いました。わかったところまで記事にします。

下記のサイトを参考にしました。

nshipster.com

実行環境

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
// スキャン開始位置は「.」

This と is の間にはスペースがあるのに、str2の結果の先頭にスペースがありません。これは、This がスキャンされた後の開始位置が 「is」の「i」 になっているためです。デフォルトでは、空白スペースと改行はスキャン開始位置を決める際にスキップされます。

続き書きました

NSScannerクラスをSwift2.1で少し使ってみました2 - 使って創ってApp