iOS_Swift_Scanner使用_字符串截取

Scanner

Scanner继承自NSObject, 遵循NSCopying协议。是一个用于扫描指定字符串的抽象类
初始化时指定需要扫描的String,可以设置需要跳过的字符集合
调用scan方法,scanner会按要求扫描出需要提取的字符串

一、初始化

let scanner: Scanner = Scanner(string: "http://www.baidu.com?type=value&age=18")

二、属性

// 初始化时输入的目标字符串,只读
let string: String = scanner.string 

// 想要跳过的字符串集合
let characters: CharacterSet? = scanner.charactersToBeSkipped
// 例如:”?111.1=222&name=mo“,把`?&`作为`charactersToBeSkipped`,则会忽略`?&`

// 是否大小写敏感,默认false
let caseSensitive: Bool = scanner.caseSensitive 

// scanner.locale 本地化,用在小数点分隔符上,一般不用指定
let isAtEnd: Bool = scanner.isAtEnd 
// 字符串是否已经扫描完毕(如果都是charactersToBeSkipped则返回true)

// 扫描位置,iOS13已弃用
let scanLocation: Int = scanner.scanLocation 

// 当前扫描位置
let currentIndex: String.Index = scanner.currentIndex 

三、方法

let scanner: Scanner = Scanner(string: "?11*2.2*3.3*namemoyan&Tqqyycxcttage=18")
scanner.charactersToBeSkipped = CharacterSet(charactersIn: "?*&") // 指定需要过滤的字符集合

var intNum: Int = 0
scanner.scanInt(&intNum) // 还可以扫描 int32 int64 的数字
print(intNum) // 11

var float1: Float = 0.0
scanner.scanFloat(&float1) // 还可以扫描 Double 的数字
print(float1) // 2.2

let decimal: Decimal? = scanner.scanDecimal()   // 扫描小数
print(decimal ?? " ") // 3.3

let str1: String? = scanner.scanString("name") // 扫描指定字符串
print(str1 ?? "") // name

// 扫描指定字符集
let str2: String? = scanner.scanCharacters(from: CharacterSet(charactersIn: "moxiaoyan"))
print(str2 ?? "") // moyan

// 扫描一个字符
let chart: Character? = scanner.scanCharacter()
print(chart ?? "") // T

// 扫描到指定字符串时停下,result是指定字符串前面的字符串
let str3: String? = scanner.scanUpToString("yy")
print(str3 ?? "") // qq

// 扫描到指定字符集合时停下,result是指定字符前面的字符串
let str4: String? = scanner.scanUpToCharacters(from: CharacterSet(charactersIn: "eag"))
print(str4 ?? "") // yycxctt

四、使用举例

let scanner: Scanner = Scanner(string: "http://www.baidu.com?name=momo&age=18")
let domain = scanner.scanUpToString("?")
print(domain) // http://www.baidu.com

scanner.scanCharacter()

var param: [String: String] = [:]
while !scanner.isAtEnd {
    let type = scanner.scanUpToString("=")
    scanner.scanCharacter()
    let value = scanner.scanUpToString("&")
    guard let type = type else {
        break
    }
    param[type] = value
}
print(param) //["name": "momo", "&age": "18"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫小言mo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值