2016-10-19 12 views
0

Ich versuche zu isolieren nicht entfernen Interpunktion von Wörtern in einem Array.Trennzeichen von Wörtern in Swift

Zum Beispiel Dieses Array enthält Wörter mit Interpunktion in ihnen:

let words = ["hello", "world!!"] 

Der folgende Code die Isolierung von einer der Interpunktionszeichen ausführt.

for i in 0..<words.count {   
    if let range = words[i].rangeOfCharacter(from: .punctuationCharacters) { 
     words.insert(words[i].substring(with: range), at: i+1) 
     words[i].replaceSubrange(range, with: "") 
    } 
} 

Und als Ergebnis der words Array wird:

["hello", "world!", "!"] 

Allerdings würde ich die Funktion wie jedes Satzzeichen einzeln statt einer nach dem anderen zu isolieren, wie es jetzt tut:

["hello", "world", "!", "!"] 

Derzeit habe ich versucht, die Zeichen der Zeichenfolge durchlaufen und testen sie gegen CharacterSet.punctuationCharacters, aber das fühlt sich ineffizient und klobig.

Wie kann ich dies schnell erreichen?

Antwort

1

Ich glaube nicht, gibt es eine Swifty Art und Weise Art und Weise, es zu tun, aber wenn Ihr Array von Wörtern konsistent ist, können Sie wie folgt tun:

let words = ["hello", "world!!"] 
var res: [String] = [] 
for word in words { 
    res += word.components(separatedBy: .punctuationCharacters).filter{!$0.isEmpty} 
    res += word.components(separatedBy: CharacterSet.punctuationCharacters.inverted).filter{!$0.isEmpty}.joined().characters.map{String($0)} 
} 
print(res) // ["hello", "world", "!", "!"] 
Verwandte Themen