IOS 如何在 swift 中获取 String.range(of:string) 的倍数
IOS How to get String.range(of:string) multiple in swift
MyText 是
let myString: NSAttributedString = <siren> 123123 <siren> 123123 <siren>
let myRange = myString.string.range(of:"<siren>")
let newString = NSMutableAttributedString()
newString.append(myString)
if myRange != nil{
newString.replaceCharacters(in: NSRange(myRange, in:myString.string),
with:myAttributeString as NSAttributedString!)
}
如果 myString
有一个 <siren>
这是可行的,但如果它有两个以上 <siren>
就不行了
只替换第一个<siren>
我认为String.range
return第一个值
如何全部找到它们?
如果你想找到所有范围你可以尝试使用这个问题的解决方案get all ranges of a substring in a string in swift
但如果您这样做的主要目的是替换某些 string/pattern 的出现,您可以添加这样的扩展名:
extension String {
func replacing(pattern: String, withTemplate: String) throws -> String {
let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
return regex.stringByReplacingMatches(in: self,
options: [],
range: NSRange(0 ..< utf16.count),
withTemplate: withTemplate)
}
}
MyText 是
let myString: NSAttributedString = <siren> 123123 <siren> 123123 <siren>
let myRange = myString.string.range(of:"<siren>")
let newString = NSMutableAttributedString()
newString.append(myString)
if myRange != nil{
newString.replaceCharacters(in: NSRange(myRange, in:myString.string),
with:myAttributeString as NSAttributedString!)
}
如果 myString
有一个 <siren>
这是可行的,但如果它有两个以上 <siren>
只替换第一个<siren>
我认为String.range
return第一个值
如何全部找到它们?
如果你想找到所有范围你可以尝试使用这个问题的解决方案get all ranges of a substring in a string in swift
但如果您这样做的主要目的是替换某些 string/pattern 的出现,您可以添加这样的扩展名:
extension String {
func replacing(pattern: String, withTemplate: String) throws -> String {
let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
return regex.stringByReplacingMatches(in: self,
options: [],
range: NSRange(0 ..< utf16.count),
withTemplate: withTemplate)
}
}