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