使用扩展名从字符串中删除特定字符

时间:2019-01-25 05:25:52

标签: swift string

我发现了这个很棒的扩展程序,它删除了除引号中的字符之外的所有内容。

extension String.UnicodeScalarView {
    var removeCharacters: String {
        return String(filter(("cfh".unicodeScalars).contains))
    }
}

print("abcd123efg".unicodeScalars.removeCharacters) // it prints “cf”, my desirable result is to make it print  “abd123eg”

它打印“ cf”,我希望得到的结果是使其打印“ abd123eg”。 您能帮我将其反转以仅删除引号之间的字符并保留所有其他内容吗?

注意:识别(unicodeScalars)也很重要,因此请不要删除此部分。

4 个答案:

答案 0 :(得分:4)

您需要取消对contains的呼叫:

return String(filter { !"cfh".unicodeScalars.contains($0) })

答案 1 :(得分:1)

如果考虑使用extension,请考虑@rmaddy,然后确保您考虑泛型并且在任何情况下都可以工作。就像您将“ cfh”保留为静态String一样,如果您想删除“ abc”,那将无法正常工作。因此,这是修改后的版本:

extension String.UnicodeScalarView {
    func removeCharacters(_ characters: String) -> String {
        return String(filter { !characters.unicodeScalars.contains($0) })
    }
}

用法: "abcd123efg".unicodeScalars.removeCharacters("cfh")

答案 2 :(得分:0)

为String创建扩展,如下所示

extension String {

func removeGroupOfCharacters(removalString : String) -> String {

    // return an Array without the removal Characters
    let filteredCharacters = Array(self).filter { !Array(removalString).contains($0) }

    // build a String with the filtered Array
    let filtered = String(filteredCharacters)

    return filtered
}
}



override func viewDidLoad() {
    super.viewDidLoad()

    let unfiltered = "abcd123efg"

    let removal = "cfh"

    print(unfiltered.removeGroupOfCharacters(removalString: removal)) 

   // => output will be like this "abd123eg\n"


}

答案 3 :(得分:-1)

这是一个基本示例。你可以那样做。

extension String {
    return aString.replacingOccurrences(of: "X", with: "")
}