快速去元音

问题描述 投票:0回答:4

我们可以像这样从 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
}
swift
4个回答
5
投票

一种选择是

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
}

2
投票

使用 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?

干杯!


1
投票

使用相同的正则表达式:

func disemvowelTheString(string: String) -> String {
    return string.stringByReplacingOccurrencesOfString(
        "[aeiou]",
        withString: "",
        options: [.RegularExpressionSearch, .CaseInsensitiveSearch]
    )
}

.CaseInsensitiveSearch
负责处理
AEIOU
,就像在 javascript 中使用
/[aeiou]/gi
一样。


0
投票
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
    }
© www.soinside.com 2019 - 2024. All rights reserved.