我们可以像这样从 javascript 中的字符串中删除所有元音:
function disemvowel(str) {
str = str.replace(/([aeiouAEIOU])/g, '')
return str;
}
我用 swift 实现了同样的功能,只是好奇如何才能像 javascript 一样写得更短?
func disemvowelTheString(string: String) -> String {
var replacedString = string
let vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
for vowel in vowels {
if string.containsString(vowel) {
replacedString = replacedString.stringByReplacingOccurrencesOfString(vowel, withString: "")
}
}
return replacedString
}
一种选择是
filter
输入字符串字符中的任何元音:
func removeVowels(input: String) -> String {
let vowels: [Character] = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
let result = String(input.characters.filter { !vowels.contains($0) })
return result
}
使用 flatMap 的另一个解决方案:
let string = "Hi how are you?"
let k = String(string.characters.flatMap(){
if(!["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"].contains($0))
{
return $0
}else{
return nil
}
})
打印:H hw r y?
干杯!
使用相同的正则表达式:
func disemvowelTheString(string: String) -> String {
return string.stringByReplacingOccurrencesOfString(
"[aeiou]",
withString: "",
options: [.RegularExpressionSearch, .CaseInsensitiveSearch]
)
}
.CaseInsensitiveSearch
负责处理 AEIOU
,就像在 javascript 中使用 /[aeiou]/gi
一样。
func removeVowels(input: String) -> String {
let vowels: [Character] = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
let result = String(input.filter { !vowels.contains($0) })
return result
}