如何从Swift 2中的字符串中删除特殊字符?

时间:2015-09-29 18:55:33

标签: ios string swift

答案 How to strip special characters out of string? 没有用。

这是我得到的,它给了我一个错误

func removeSpecialCharsFromString(str: String) -> String {
    let chars: Set<String> = Set(arrayLiteral: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_")

    return String(str.characters.filter { chars.contains($0) }) //error here at $0
}

$ 0处的错误表示_Element(aka Character)无法转换为预期的参数类型'String'。

6 个答案:

答案 0 :(得分:51)

像这样:

func removeSpecialCharsFromString(text: String) -> String {
    let okayChars : Set<Character> = 
        Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters)
    return String(text.characters.filter {okayChars.contains($0) })
}

以下是测试方法:

let s = removeSpecialCharsFromString("père") // "pre"

答案 1 :(得分:18)

SWIFT 4:

func removeSpecialCharsFromString(text: String) -> String {
    let okayChars = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-=().!_")
    return text.filter {okayChars.contains($0) }
}

更清洁的方式:

extension String {

    var stripped: String {
        let okayChars = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-=().!_")
        return self.filter {okayChars.contains($0) }
    }
}

使用此扩展程序,如:

let myCleanString = "some.Text@#$".stripped

输出:“some.Text”

答案 2 :(得分:9)

我认为更清洁的解决方案可能是这种方法:

extension String {
    var alphanumeric: String {
        return self.components(separatedBy: CharacterSet.alphanumerics.inverted).joined().lowercased()
    }
}

答案 3 :(得分:6)

Swift 1.2中,

let chars = Set("abcde...")

创建了一个包含给定字符串中所有字符的集合。 在 Swift 2.0 中,这必须以

完成
let chars = Set("abcde...".characters)

原因是字符串本身不再符合 SequenceType,您必须明确使用characters视图。

通过此更改,您的方法将按预期编译并运行:

func removeSpecialCharsFromString(str: String) -> String {
    let chars = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters)
    return String(str.characters.filter { chars.contains($0) })
}

let cleaned = removeSpecialCharsFromString("ab€xy")
print(cleaned) // abxy

备注: @Kametrixom建议只创建一次。所以 if 有 使用上述方法的性能问题你可以移动 在函数外部声明集合,或者使它成为一个 本地static

func removeSpecialCharsFromString(str: String) -> String {
    struct Constants {
        static let validChars = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters)
    }
    return String(str.characters.filter { Constants.validChars.contains($0) })
}

答案 4 :(得分:1)

如果您只需要在字符串中保留ascii可打印字符,则可以过滤它们以检查其unicodeScalar值是否为ascii:

extension Character {
    var isAscii: Bool {
        return unicodeScalars.allSatisfy { $0.isASCII }
    }
}

extension RangeReplaceableCollection where Self: StringProtocol {
    var asciiPrintable: Self {
        return filter { $0.isAscii }
    }
}

let string = "cafe\u{301}"
let asciiPrintable = string.asciiPrintable
print(asciiPrintable)  // "caf"

答案 5 :(得分:1)

尝试一下:

df = pd.DataFrame(data1, columns= ['Price', 'Location', 'Area size'])
for x in range (len(price)):
    data1 = {'Price': [price[x].text],
        'Location': [location[x].text],
        'Size': [area_size[x].text]}
    df.to_csv('static/home.csv', header="False", mode="a")
driver.quit()