StringScanner

Build Status codecov Platform Platform Language: Swift CocoaPods Carthage

StringScanner 是一个字符串扫描器的原生 Swift 实现,是 NSScanner 的替代品。

StringScanner 仅使用 Swift 标准库构建,不依赖于 libFoundation。 这样,它可以在 Mac 和 Linux 上构建,并且可以静态编译。

用法

StringScanner 使用字符串初始化,它有一个内部索引,随着字符串的扫描而递增。

StringScanner 有两个操作,peekscan

scan 或 peek 的结果是一个 ScannerResult,它具有以下值

扫描 (Scan)

按长度扫描

扫描给定长度的字符串

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

预览 (Peek)

按长度预览

预览给定长度的字符串

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 提供现成的字符集,代表最常用的字符集,例如 .allLetterssmallLettersalphaNumeric

字符集可以组合在一起。 例如,我们可以搜索所有数字 + 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

事务 (Transactions)

scanner.reset() 将内部索引重置为零

重置内部索引

scanner.reset() 将内部索引重置为零

安装

您可以使用 CocoaPods、Carthage 和 Swift Package Manager 安装 Swiftline

CocoaPods

use_frameworks!
pod 'StringScanner'

Carthage

github 'getGuaka/StringScanner'

Swift Package Manager

在您的 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