iOS中要进行文本操作,如截取,trim等,CharacterSet是很重要的一个环节。iOS中用CharacterSet来表示一组Unicode的集合,它经常和Scanner,NSPredicate配合使用。

这里是SDK提供的常用CharacterSet

CharacterSet.alphanumerics // 字母和数字的组合,包含大小写, 不包含小数点CharacterSet.decimalDigits // 0-9的数字,也不包含小数点CharacterSet.controlCharacters // ASCII 码0-31号字符,详见http://ascii.cl/control-characters.htmCharacterSet.whitespaces // 空格CharacterSet.whitespacesAndNewlines // 空格和换行CharacterSet.letters //所有英文字母,包含大小写 65-90 97-122CharacterSet.lowercaseLetters // 小写英文字母 97-122CharacterSet.uppercaseLetters // 大写英文字母 65-90// 通用字符类别划分详见 https://msdn.microsoft.com/zh-cn/library/20bw873z(v=vs.110).aspxCharacterSet.nonBaseCharacters // Returns a character set containing the characters in Unicode General Category M*.CharacterSet.decomposables // 没搞懂,也没用过,同音字母可以用这个?CharacterSet.illegalCharacters // 不合规字符,没有在Unicode 3.2 标准中定义的字符CharacterSet.punctuationCharacters // 标点符号,连接线,引号什么的 P*CharacterSet.symbols // 符号,包含S* 所有内容,运算符,货币符号什么的CharacterSet.capitalizedLetters // 字母,首字母大写,Lt类别CharacterSet.newlines // 返回一个包含换行符的字符集,`U+000A ~ U+000D`, `U+0085`, `U+2028`, and `U+2029`CharacterSet.urlHostAllowed // URL 中Host子模块中允许的字符集.CharacterSet.urlPathAllowed // URL 中domain后面的路径子模块中允许的字符集.CharacterSet.urlUserAllowed // URL 中用户子模块中允许的字符集.CharacterSet.urlQueryAllowed // URL中请求信息子模块中允许的字符集.CharacterSet.urlFragmentAllowed // 片段URL子模块中允许的字符集.CharacterSet.urlPasswordAllowed // URL中密码子模块中允许的字符集.

手动创建CharacterSet的一些方法

CharacterSet(charactersIn: "Hello") // 通过字符串创建CharacterSetlet dot = ".".unicodeScalarslet range = dot[dot.startIndex]...dot[dot.startIndex]let dotSet = CharacterSet(charactersIn: range) // 通过range创建CharacterSet,此处创建的为只包含"."字符的CharacterSetlet exceptDotSet = dotSet.inverted // 反转,得到除.以外的字符集// 此处可以通过range创建比如大于5的数字,D-X的字母合集等let dWord = "D".unicodeScalars
let xWord = "X".unicodeScalarslet wordRange = dWord[dWord.startIndex]...xWord[xWord.startIndex]let wordSet = CharacterSet(charactersIn: wordRange)// 通过位图创建CharacterSet,字符集的原始位图表示是表示基本多语言(BMP)的代码点范围的前2 ^ 16位(即8192字节)的字节数组
let bitmapRep = Data(count: 8192)CharacterSet(bitmapRepresentation: bitmapRep)

判断字符集的包含关系和父子关系

dotSet.contains(dot[dot.startIndex]) // 包含dotSet.contains(UnicodeScalar(65)/*字母A*/) // 不包含// 判断是否为SuperSet,另一种包含关系
CharacterSet.letters.isSuperset(of: CharacterSet.alphanumerics)
CharacterSet.alphanumerics.isSuperset(of: CharacterSet.letters)

CharacterSet的运算操作

let hellSet = CharacterSet(charactersIn: "Hell")
var lleoSet = CharacterSet(charactersIn: "lleo")lleoSet.remove(charactersIn: "e") // -> l, o
lleoSet.insert(charactersIn: "e") // -> l, e, olleoSet.union(hellSet) // 两个组合起来 -> H, l, e, o
lleoSet.intersection(hellSet) // 两个set的交集 -> l, elleoSet.inverted // 取反,出去 l, e, o外的所有字符

一些实际的运用

/ 去除首尾多余的字符,此处为空格
str.trimmingCharacters(in: CharacterSet.whitespaces)// 通过数字将字符串转换为数组
"a1aa2aaa3aaaa4aaaaa".components(separatedBy: CharacterSet.decimalDigits)// 去掉一段字符里面多余的空格, 这个东西在一大段字里面空格打多了的情况下很好用
var trimmingSpaceStr = str.trimmingCharacters(in: CharacterSet.whitespaces) // 去除首尾空格var array = trimmingSpaceStr.components(separatedBy: CharacterSet.whitespaces) // 通过空格转换为数组let predicate = NSPredicate(format: "self <> ''") // 不等于空字符串do {try array.filter { (string) -> Bool inpredicate.evaluate(with: string) // 去掉多余的空格,如果等于空字符串就不要这个}.joined(separator: " ")
}
catch {}

IOS 文本操作笔记——CHARACTERSET相关推荐

  1. IOS开发学习笔记(一)

    概述: iOS是苹果开发的手持设备操作系统(iPhone,iPad,iPod touch,iPad mini). 基于UNIX,层次架构:核心操作系统层(Core OS)-> 核心服务层(Cor ...

  2. Spark+hadoop+mllib及相关概念与操作笔记

    Spark+hadoop+mllib及相关概念与操作笔记 作者: lw 版本: 0.1 时间: 2016-07-18 1.调研相关注意事项 a) 理解调研 调研的意义在于了解当前情况,挖掘潜在的问题, ...

  3. office是python打开方式_Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  4. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  5. python基础操作笔记

    python基础操作笔记 第二章 变量和简单的数据类型 #2.1输出数据hello world print('--------------------------------------------- ...

  6. python读取word内容复制粘贴,Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  7. Echarts字体和线条颜色设置操作笔记

    这篇文章主要讲述Echarts设置字体和线条的颜色相关操作笔记,希望文章对你有所帮助,主要是自己的在线笔记吧.我在前面先放各种修改前后图片颜色的对照,后面再详细介绍代码.这样更方便阅读及读者知道,是否 ...

  8. ios逆向入门笔记-HOOK-QQ登录

    ios逆向入门笔记-HOOK-QQ登录 选择目标 砸壳 基本调试 Reveal+确定目标action及target 利用Logos 进行 hook 后续 选择目标 在经过之前的配置,这次有点小改动= ...

  9. 开源高仿印象笔记的iOS应用——朝夕笔记(Oncenote)

    iOS-Oncenote    这是一款类似于印象笔记Evernote的生活类iOS应用--朝夕笔记 Oncenote.我希望能为更多的iOS开发者提供帮助与服务.当然App中还有不少bug和可扩展的 ...

最新文章

  1. Spring Boot+Docker微服务分布式服务架构设计和部署案例
  2. Laravel 5.6 中文文档翻译完成,译者 60 人,耗时 10 天
  3. Opensetack + Kubernetes(K8S)黄金搭档漫谈
  4. ML:从0到1 机器学习算法思路实现全部过程最强攻略
  5. Vue中进行断点调试的两种方式(使用外部浏览器和VsCode的 Debug for Chrome插件)
  6. mybatis generator 属性详解
  7. (转载)网络编程释疑之:同步,异步,阻塞,非阻塞
  8. c++堆栈溢出怎么解决_Windows Kernel Exploit 内核漏洞学习(2)-内核栈溢出
  9. MTK 驱动开发(32)---Sensor 移植及调试2
  10. 【es】ELASTICSEARCH之自定义JAVA代码的安全策略管理
  11. oracle11g重建undo,Oracle11gORA-03113故障,重建控制文件
  12. java applet 浏览器_浏览器不能加载Java中Applet小程序
  13. html radio 去掉圆点,html radio默认选中,去除选中
  14. 大智慧找不到服务器,【图】大智慧官方居然没有全推服务器请老师解决_股票软件,股票指标,炒股,股票论坛,选股公式_股票软件技术交流论坛_理想论坛 - 股票论坛...
  15. 一、auto_test_base
  16. LINUX虚拟机与WINDOWS主机,直接复制交换文件会有问题
  17. 全国资格考试网报平台证件照片审核处理系统报错:打开照片文件类型还是JPG或JPEG格式,请选择JPG或JPEG格式照片文件。
  18. 泛微自带第三方短信接口
  19. CPL、BCPL、B语言
  20. NOAA GSOD数据中 国家与地区缩写对应全称

热门文章

  1. 详解Unity中的导入3D模型
  2. Pygame pgu 入门详解
  3. 黑苹果更改时间命令_黑苹果Mac系统快捷键修改
  4. 第一课 大数据技术之Fink1.13的实战学习-部署使用和基础概念
  5. 百度地图三种定位方式测试(高精度、低功耗、仅用设备)
  6. 医疗软件开发解决方案
  7. python获取每日支付宝与银行卡账单
  8. Java变成笔记4:复用类
  9. 【RAC】oracle 11g RAC两个机器重启后节点二能找到asm磁盘,节点一没有找到
  10. 【完美解决】修复concrt140.dll未找到错误的问题