写点什么

iOS 查找字符串出现的范围

作者:新一
  • 2022-12-02
    山东
  • 本文字数:770 字

    阅读完需:约 3 分钟

swift 中查找字符串出现的位置,返回一个数组格式,直接上代码吧

因为字数不到 50 字,不能发表,那我就说一下应用场景吧:

主要就是对富文本的操作,比如,文本里 @的人名字需要更改颜色,字体

let test1: String = "这是铁子你说对不说对铁好说对"let test2 = "铁子"let test3 = "子"let test4 = "哈哈"let test5 = "😁"let test6 = "说对"extension String {
func nsranges(of substring: String, options: CompareOptions = [], locale: Locale? = nil) -> [NSRange] { let totalLength = NSString(string: self).length var ranges: [NSRange] = [] var lastLocation = 0 var lastLength = 0 var currentLocation = 0 var leftLength = totalLength
while leftLength >= NSString(string: substring).length { let targetRange = NSRange(location: currentLocation, length: leftLength)
let range = NSString(string: self).range(of: substring, options: options, range: targetRange, locale: locale) if range.location + range.length > totalLength { break }
ranges.append(range) lastLocation = ranges.last?.location ?? 0 lastLength = ranges.last?.length ?? 0 currentLocation = lastLocation + lastLength leftLength = totalLength - currentLocation } return ranges }
}
print(test1.nsranges(of: test2, options: .caseInsensitive))print(test1.nsranges(of: test3, options: .caseInsensitive))print(test1.nsranges(of: test4, options: .caseInsensitive))print(test1.nsranges(of: test5, options: .caseInsensitive))print(test1.nsranges(of: test6, options: .caseInsensitive))//打印结果//[{2, 2}]//[{3, 1}]//[]//[]//[{5, 2}, {8, 2}, {12, 2}]
复制代码


用户头像

新一

关注

还未添加个人签名 2018-11-15 加入

还未添加个人简介

评论

发布
暂无评论
iOS 查找字符串出现的范围_ios_新一_InfoQ写作社区