2017-12-26 4 views
-1

Swift 4 hat anscheinend viele neue Änderungen an String vorgenommen. Ich frage mich, ob es jetzt eine eingebaute Methode gibt, um alle Instanzen eines Teilstrings innerhalb eines Strings zu finden.Effiziente Möglichkeit, alle Instanzen von Substring innerhalb einer Swift-Zeichenfolge zu finden

Hier ist die Art von Dingen, die ich suche:

let searchSentence = "hello world, hello" 
let wordToMatch = "hello" 

let matchingIndexArray = searchSentence.indices(of: "wordToMatch") 

'matchingIndexArray' wäre dann [0, 13]

Antwort

0
import Foundation 

let searchSentence = "hello world, hello" 

var searchRange = searchSentence.startIndex..<searchSentence.endIndex 
var ranges: [Range<String.Index>] = [] 

let searchTerm = "hello" 

while let range = searchSentence.range(of: searchTerm, range: searchRange) { 
    ranges.append(range) 
    searchRange = range.upperBound..<searchRange.upperBound 
} 

print(ranges.map { "(\(searchSentence.distance(from: searchSentence.startIndex, to: $0.lowerBound)), \(searchSentence.distance(from: searchSentence.startIndex, to: $0.upperBound)))" }) 

Ausgänge:

["(0, 5)", "(13, 18)"] 
+0

@JoshCaswell Nee; habe es in CodeRunner versucht, bevor ich es gepostet habe. Es funktioniert wie geschrieben in Swift 4 und stellt die Ausgabe zur Verfügung. –

+0

@JoshCaswell Es ist mindestens seit Swift 3 drin, denke ich. Könnten Sie bitte den Downvote entfernen, wenn das der Grund dafür ist? –

+0

@JoshCaswell Fair genug. –

Verwandte Themen