StringScanner 是一个字符串扫描器的原生 Swift 实现,是 NSScanner 的替代品。
StringScanner 仅使用 Swift 标准库构建,不依赖于 libFoundation。 这样,它可以在 Mac 和 Linux 上构建,并且可以静态编译。
StringScanner 使用字符串初始化,它有一个内部索引,随着字符串的扫描而递增。
StringScanner 有两个操作,peek 和 scan。
scan 返回一个字符串并递增内部字符串索引。peek 返回一个字符串,但不会递增内部字符串索引。scan 或 peek 的结果是一个 ScannerResult,它具有以下值
扫描给定长度的字符串
let scanner = StringScanner(string: "Hello my name is omar")
scanner.scan(length: 5)
返回 ScannerResult.("Hello")
扫描字符串直到找到一个模式
let scanner = StringScanner(string: "Hello my name is omar")
scanner.scan(untilPattern: "my")
返回 ScannerResult.("Hello ")
扫描字符串直到找到一个字符串
let scanner = StringScanner(string: "Hello my name is omar")
scanner.scan(untilString: "my")
返回 ScannerResult.("Hello ")
扫描字符串以查找给定的字符串。 如果找到搜索字符串,它将被返回并且扫描器索引会递增。
let scanner = StringScanner(string: "Hello my name is omar")
scanner.scan(forString: "Hello mymy")
返回 ScannerResult.("Hello my ")
如果我们扫描一个不存在的字符串,我们将得到 ScannerResult.none
扫描字符串直到找到一个字符集。 如果找到字符集,它将被返回并且扫描器索引会递增。
let scanner = StringScanner(string: "This is a test 1234")
scanner.scan(untilCharacterSet: .range("1"..<"4"))
返回 ScannerResult.("This is a test ")
如果我们扫描一个不存在的字符串,我们将得到 ScannerResult.none
扫描字符串直到找到一个字符集并返回字符串和找到的字符集。 如果找到字符集,它将被返回并且扫描器索引会递增。
let scanner = StringScanner(string: "This is a test 1234")
scanner.scan(forCharacterSet: .range("1"..<"4"))
返回 ScannerResult.("This is a test 1")
如果我们扫描一个不存在的字符串,我们将得到 ScannerResult.none
预览给定长度的字符串
let scanner = StringScanner(string: "Hello my name is omar")
scanner.peek(length: 5)
返回 ScannerResult.("Hello")
预览字符串直到找到一个模式
let scanner = StringScanner(string: "Hello my name is omar")
scanner.peek(untilPattern: "my")
返回 ScannerResult.("Hello ")
预览字符串直到找到一个字符串
let scanner = StringScanner(string: "Hello my name is omar")
scanner.peek(untilString: "my")
返回 ScannerResult.("Hello ")
预览字符串以查找给定的字符串。 如果找到搜索字符串,它将被返回。
let scanner = StringScanner(string: "Hello my name is omar")
scanner.peek(forString: "Hello mymy")
返回 ScannerResult.("Hello my ")
如果我们扫描一个不存在的字符串,我们将得到 ScannerResult.none
预览字符串直到找到一个字符集。 如果找到字符集,它将被返回。
let scanner = StringScanner(string: "This is a test 1234")
scanner.peek(untilCharacterSet: .range("1"..<"4"))
返回 ScannerResult.("This is a test ")
如果我们扫描一个不存在的字符串,我们将得到 ScannerResult.none
扫描字符串直到找到一个字符集并返回字符串和找到的字符集。 如果找到字符集,它将被返回。
let scanner = StringScanner(string: "This is a test 1234")
scanner.peek(forCharacterSet: .range("1"..<"4"))
返回 ScannerResult.("This is a test 1")
如果我们扫描一个不存在的字符串,我们将得到 ScannerResult.none
CharacterSet 提供现成的字符集,代表最常用的字符集,例如 .allLetters、smallLetters、alphaNumeric。
字符集可以组合在一起。 例如,我们可以搜索所有数字 + ABC
let scanner = StringScanner(string: "This is a test 1234")
let set = CharacterSet.numbers.join(characterSet: CharacterSet.string("ABC"))
然后我们可以扫描直到找到该集合
scanner.scan(untilCharacerSet: set)
这会返回 This is a test
scanner.reset() 将内部索引重置为零
scanner.reset() 将内部索引重置为零
您可以使用 CocoaPods、Carthage 和 Swift Package Manager 安装 Swiftline
use_frameworks!
pod 'StringScanner'
github 'getGuaka/StringScanner'
在您的 Package.swift 中添加 swiftline 作为依赖项
import PackageDescription
let package = Package(name: "YourPackage",
dependencies: [
.Package(url: "https://github.com/getGuaka/StringScanner.git", from: "0.0.0"),
]
)
可以在这里找到测试。
使用以下命令运行它们
swift test