2017-05-06 66 views
1

比方說,我有一個String類型的變量,它包含一個String。在這個字符串中,有一個或多個單詞。我也有一個字符串數組。我想檢查數組中的字符串,查找並替換數組中找到的單詞。Swift 3替換String中的單詞,檢查數組中的值

例如,單詞「able」在數組中。單詞「able」也在String變量中。我希望這個詞能夠替換爲「+」字符。

我已經試過這樣:

//stopWords = array of Strings/keywords = String variable 
for words in stopWords { 
     keywordsFormatted = keywords.replacingOccurrences(of: words, with: "+", options: .regularExpression, range: nil) 
} 

,並不會改變任何東西。我也嘗試了一段時間的循環,還有其他一些我現在甚至都不想回憶的方法,哈哈。任何幫助表示讚賞

回答

4

鑑於

let stopWords = ["red", "green", "blue"] 
let keywords = "The sky is blue not green" 

讓我們創建一個集

let stopWordsSet = Set(stopWords) 

終於讓我們來解決問題

let result = keywords 
    .components(separatedBy: " ") 
    .map { stopWordsSet.contains($0) ? "+" : $0 } 
    .joined(separator: " ") 

哦......並讓測試

print(result) // The sky is + not + 

請注意此解決方案是區分大小寫。此外,它是行不通的關鍵字中的單詞不是由空格分隔。例如。由於,"The sky is blue, not green"將無法​​正常工作。

補遺從阿德里安

如果你要更新的文本框,只需使用didSet,就像這樣:

var keywords = "The sky is blue not green" { 
    didSet { 
     // if keywords is not empty, set the myTextField.text to keywords 
     if !keywords.characters.isEmpty { 
      myTextField.text = keywords 
     } 
    } 
} 
+0

謝謝,我希望但不工作或者。我忘了提及關鍵字是一個文本字段設置的值,如 'var keywords:String =「」' 'keywords = searchField.text!' 編輯,我希望輸出由空格分隔像這樣測試它。 – froggomad

+0

@froggomad我根據你的評論添加了一些答案。 – Adrian

+0

謝謝最後一點是沒有必要的。要清楚,我從文本字段爲關鍵字分配值。而不是相反......我不知道爲什麼它似乎沒有重新格式化關鍵字,但它是! – froggomad