Swift 3替换String中的单词,检查数组中的值

问题描述:

比方说,我有一个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) 
} 

,并不会改变任何东西。我也尝试了一段时间的循环,还有其他一些我现在甚至都不想回忆的方法,哈哈。任何帮助表示赞赏

鉴于

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