NSRange是个使用频率比较高的对象,尤其是在设置富文本(AttributedString)的地方。自带的 rangeOfString 就可以查找某字符所在字符串中的位置。但如果要获取多次出现的位置信息就需要另辟蹊径了。如下代码实现了,获取多次出现的位置信息的方法,参考如下:

    /// 获取字符出现的位置信息(支持多次位置获取)/// - Parameter string: 原始文本/// - Parameter inString: 需要查找的字符private func rangeOfString(string:NSString,andInString inString:String) -> [NSRange] {var arrRange = [NSRange]()var _fullText = stringvar rang:NSRange = _fullText.range(of: inString)while rang.location != NSNotFound {var location:Int = 0if arrRange.count > 0 {if arrRange.last!.location + arrRange.last!.length <= string.length {location = arrRange.last!.location + arrRange.last!.length}}_fullText = NSString.init(string: _fullText.substring(from: rang.location + rang.length))if arrRange.count > 0 {rang.location += location}arrRange.append(rang)rang = _fullText.range(of: inString)}return arrRange}

Swift 中本身有 Range 对象,由于对其使用方法和特性不甚了解,故使用NSRange 对象。

引申一下,批量设置AttributedString,就需要使用到如上代码,具体参考代码如下:

    /// 批量设置富文本/// - Parameter textFont: 默认文本/// - Parameter textColor: 默认文本颜色/// - Parameter changeTexts: 需要改变的文本/// - Parameter changFonts: 需要改变的字体/// - Parameter changeColors: 需要改变的颜色/// - Parameter isLineThrough: 是否下划线func setAttributeStringTexts(FullTextFont textFont:UIFont,andFullTextColor textColor:UIColor,withChangeTexts changeTexts:[String],withChangeFonts changFonts:[UIFont],withChangeColors changeColors:[UIColor],isLineThrough:Bool = false) -> NSAttributedString{let strFullText:String = selfvar range:NSRange?var dicAttr:[NSAttributedString.Key:Any]?let attributeString = NSMutableAttributedString.init(string: strFullText)//不需要改变的文本range = NSString.init(string: strFullText).range(of: String.init(strFullText))dicAttr = [NSAttributedString.Key.font:textFont,NSAttributedString.Key.foregroundColor:textColor,]attributeString.addAttributes(dicAttr!, range: range!)//需要改变的文本var index:Int = 0for item in changeTexts {//range = NSString.init(string: strFullText).range(of: item)let ranges = self.rangeOfString(string: NSString.init(string: strFullText), andInString: item)for range in ranges {dicAttr = [NSAttributedString.Key.font:changFonts.count > index ? changFonts[index] : changFonts.first as Any,NSAttributedString.Key.foregroundColor:changeColors.count > index ? changeColors[index] : changeColors.first as Any,]if isLineThrough {dicAttr?[NSAttributedString.Key.strikethroughStyle] = NSNumber.init(value: 1)}if range.location + range.length <= fullString.length {attributeString.addAttributes(dicAttr!, range: range)}}index += 1}return attributeString}

以上代码使用效果详见如下图片:

Swift 使用NSRange 查找字符多次出现的位置处理相关推荐

  1. python找到字符中空格所在的位置_Python 查找字符在字符串中的位置示例效果

    Python 查找字符在字符串中的位置实例 下面为大家分享一篇Python 查找字符在字符串中的位置实例,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 str_1='wo shi yi zh ...

  2. python查找指定字符位置_Python 查找字符在字符串中的位置实例

    下面为大家分享一篇Python 查找字符在字符串中的位置实例,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 str_1='wo shi yi zhi da da niu ' char_1=' ...

  3. swift 字符串中查找字符位置

    let range: Range ="包含所有字符".range(of: "子字符串")! location 子字符串位置 let location = fix ...

  4. mysql查找字符第n次出现位置_查找字符在字符串中第N次出现的位置

    1.查找字符串 @find 在字符串 @str 中第 (@n) 次出现的位置.没有第 (@n) 次返回 0. 返回@find在@str中第(@n)次出现的位置.没有第(@n)次返回0. create ...

  5. 查找字符串中指定字符的位置c语言,C语言中查找字符在字符串中出现的位置的方法...

    C语言strchr()函数:查找某字符在字符串中首次出现的位置 头文件:#include strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const ...

  6. Swift3.0语言教程查找字符集和子字符串

    Swift3.0语言教程查找字符集和子字符串 Swift3.0语言教程查找字符集和子字符串,在字符串中当字符内容很多时,我们就需要使用到查找字符集或者子字符串的方法.以下我们将讲解3种查找字符集和子字 ...

  7. c 语言 字符 查找,C 语言实例 - 查找字符在字符串中出现的次数

    C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include int main() { char str[], ...

  8. 自学笔记——2.字符串的切片、遍历、查找字符

    一.字符串的切片 字符串的部分片段或者子集称为切片操作,所有字符串的切片操作是通过方括号([ ])实现的,语法:[n : m : s] 会返回一个子字符串,从索引值n到n-1之间,以s为步进,即:n之 ...

  9. oracle 并接去掉字符串,ORACLE删除字符-TRIM字符截取-substr查找字符-instr

    TRIM函数,最简单的功能就是来去除字符串的行首和行尾的空格,返回值类型是varchar2; 1.TRIM函数的完整语法描述 TRIM([{{LEADING | TRAILING | BOTH} [ ...

最新文章

  1. windows 正在查找bash.exe
  2. 丁香园 武汉 神童_杭州、武汉、成都哪个城市更适合程序员发展
  3. [Leetcode][第20题][JAVA][有效的括号][栈][HashMap]
  4. 软件工程学习进度第九周暨暑假学习进度之第九周汇总
  5. 避免将属性的可见属性层次结构用作用户定义的层次结构中的级别
  6. 练习四十八:面向对象执行效率
  7. Linux之Inode详解 作者:羽飞博客 http://www.opsers.org/
  8. redis各项功能解决了什么问题
  9. 华硕电脑桌面没有计算机图标 怎么弄出来,笔记本电脑开机蓝屏没桌面图标的方法...
  10. 单相PWM整流器工作原理与调制方向判断
  11. NGUI-动画Tween
  12. dying relu 和weight decay
  13. 如何利用文字推动业绩 ——营销人员的软文营销
  14. android控件翻书效果,android ViewPager实现滑动翻页效果实例代码
  15. Origin绘图后导出图片的方法
  16. 关于java实习心得总结(十篇)
  17. Not Shading
  18. node-sass 替换为 sass
  19. MongoDB 中文的全文索引
  20. css中background: lighten的用法

热门文章

  1. 业务中台、技术中台、数据中台、AI中台
  2. form6i支持 oracle 11g,使用Form6i保存文件到Oracle中的Blob字段
  3. 操作系统实验:存储管理(C++)
  4. 装饰模式 - Unity
  5. Echarts柱状图柱子点击事件
  6. 炸弹小分队+蒲公英联机平台联机教程
  7. ffmpeg为视频添加特效
  8. AutoDL论文解读(五):可微分方法的NAS
  9. Latex和word相互转换。word表格制作
  10. 过来人教你如何系统学STM32