有人能解释一下,为什么在默认的.charactersToBeSkipped设置为.whitespacesAndNewlines的情况下,扫描仪在“扫描1”(参见代码)中的第一个空格处停止呢?看来我不懂跳过字符的概念。
扫描2-4只是测试用例。Xcode 11 / Swift 4
游乐场:
let hexCs = CharacterSet(charactersIn: "1234567890abcdefABCDEF")
let hexWhiteCs = CharacterSet().union(hexCs).union(.whitespacesAndNewlines)
let ascii = "<19 19 19 19>"
let scanner = Scanner(string:ascii)
_ = scanner.scanString("<")
let reset = scanner.currentIndex
/// Scan 1:
var result = scanner.scanCharacters(from: hexCs) // "19"
/// Scan 2:
scanner.charactersToBeSkipped = nil
scanner.currentIndex = reset
result = scanner.scanCharacters(from: hexCs) // "19"
/// Scan 3:
scanner.currentIndex = reset
result = scanner.scanCharacters(from: hexWhiteCs) // "19 19 19 19"
/// Scan 4:
scanner.charactersToBeSkipped = .whitespacesAndNewlines
scanner.currentIndex = reset
result = scanner.scanCharacters(from: hexWhiteCs) // "19 19 19 19"
let expected = result!.filter { !CharacterSet.whitespacesAndNewlines.contains($0.unicodeScalars.first!) } // "19191919"发布于 2020-08-23 13:28:23
文档可以:
要跳过的字符在扫描仪检查目标之前被跳过。例如,如果扫描器忽略空格并向其发送
scanInt:消息,则它跳过空格,直到找到十进制数字或其他字符。当一个元素被扫描时,没有字符被跳过。
https://stackoverflow.com/questions/63546740
复制相似问题