【问题标题】:NSScanner issue with finding numbers that begin with 0NSScanner 查找以 0 开头的数字的问题
【发布时间】:2016-04-08 19:16:33
【问题描述】:

我在使用 NSScanner 时遇到问题。

我有这个字符串: 195 058 042 yuiyui 123

我试图只返回整数。但是,任何在空格前包含 0 的数字都不会被扫描属性。

 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)
}

这将打印以下内容: 195 48 42

它缺少 '048' 中的 0 但我不知道为什么

它应该打印以下内容

195 048 42

谢谢

【问题讨论】:

  • 整数没有前导 0,如果要保留它,则不能将其作为整数扫描
  • 试试let n = 000042 ; print(n),或者在你的计算器上输入“0 0 0 0 4 2”:)
  • 啊好的。那讲得通。所以我想我必须以字符串的形式进行扫描,对吧?

标签: ios swift nsscanner


【解决方案1】:

如果你想在较长的字符串中捕获数字子字符串NSRegularExpression 更合适:

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))
}

【讨论】:

  • 谢谢!这是完美的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2016-08-08
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多