NSScanner issue with finding numbers that begin with 0

51 Views Asked by At

I having an issue using NSScanner.

I have this string: 195 058 042 yuiyui 123

and I'm trying to just return the integers. however, any number that contains a 0 before the space doesn't get scanned property.

 var note = "195 048 042 yuiyui 123"

let whitespaceAndPunctuationSet = NSMutableCharacterSet.whitespaceAndNewlineCharacterSet()
let numbersCharacterSet = NSCharacterSet.decimalDigitCharacterSet()

let stringScanner = NSScanner(string: note)

var value = 0
while stringScanner.scanInteger(&value) {
    print(value)
}

and this prints the following: 195 48 42

It it missing the 0 from '048' But I'm not sure why

it should print the following

195 048 42

Thanks

1

There are 1 best solutions below

1
Code Different On BEST ANSWER

If you want to capture numeric substrings insider the longer string, NSRegularExpression is more appropriate:

let note = "195 048 042 yuiyui 123"

let regex = try! NSRegularExpression(pattern: "\\d+", options: [])

regex.enumerateMatchesInString(note, options: [], range: NSMakeRange(0, note.characters.count)) { result, flag, stop in
    guard let match = result else {
        // result is nil
        return
    }

    let range = match.rangeAtIndex(0)
    print((note as NSString).substringWithRange(range))
}