I would like to get the start and end position of a substring within a string. Example: in the string "hi this is my name"; if I provide the string "this" I would like to know the start index is 4 and end index is 7.
I found several links, including this one:
Swift: get index of start of a substring in a string a-substring-in-a-string
But it doesn´t work in swift 3 as the method is now called range.
I am now using this:
let range = mystring.range(of: "StringSearch")?.lowerBound
which returns this
Swift.String.UnicodeScalarView.Index(_position: 15), _countUTF16: 1))
And I cannot obtain the position as an integer as this is an index.
In summary, I would like to have in a variable of type int the position, in this case 15.
Can anyone help me?
Thanks everyone.
The distance(from:to:)
method of String
computes the difference between two String.Index
values:
let mystring = "hi this is my name" if let range = mystring.range(of: "this") { let startPos = mystring.distance(from: mystring.startIndex, to: range.lowerBound) let endPos = mystring.distance(from: mystring.startIndex, to: range.upperBound) print(startPos, endPos) // 3 7 }
Actually it just forwards the call to the string's CharacterView
, so the above gives the same result as
let mystring = "hi this is my name" if let range = mystring.range(of: "this") { let startPos = mystring.characters.distance(from: mystring.characters.startIndex, to: range.lowerBound) let endPos = mystring.characters.distance(from: mystring.characters.startIndex, to: range.upperBound) print(startPos, endPos) // 3 7 }
If you need all occurrences of the string:
let mystring = "this is this and that is that" var searchPosition = mystring.startIndex while let range = mystring.range(of: "this", range: searchPosition..<mystring.endIndex) { let startPos = mystring.distance(from: mystring.startIndex, to: range.lowerBound) let endPos = mystring.distance(from: mystring.startIndex, to: range.upperBound) print(startPos, endPos) searchPosition = range.upperBound }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With