我正在尝试隔离而不是从数组中的单词中删除标点符号。
例如,下面的数组包含有标点符号的单词:
let words = ["hello", "world!!"]
下面的代码执行分隔一个标点符号。
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: "")
}
}
因此words
数组变成:
["hello", "world!", "!"]
但是,我希望函数单独隔离每个标点符号,而不是像现在这样一次一个:
["hello", "world", "!", "!"]
到目前为止,我已经尝试遍历字符串的字符并针对CharacterSet.punctuationCharacters
测试它们,但感觉效率低下且笨拙。
我如何以快速的方式实现这一点?
我不认为有一种快速时尚的方式来做到这一点,但如果你的单词数组是一致的,你可以这样做:
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", "!", "!"]