2

文字列で許可する文字のセットがあります。

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ")

次のように、2 つの書式設定されていないデータが等しいと見なされるように、文字列から他の文字を削除したいと考えています。

"American Samoa".lowercaseString == "american_samoa1".lowercaseString

これらの変換された文字列の小文字バージョンは次のようになります"americansamoa"

4

5 に答える 5

9

そのための関数を書きましょう(swift 1.2で)。

func stripOutUnwantedCharactersFromText(text: String, set characterSet: Set<Character>) -> String {
    return String(filter(text) { set.contains($0) })
}

次のように呼び出すことができます。

let text = "American Samoa"
let chars = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
let strippedText = stripOutUnwantedCharactersFromText(text, set: chars)

ピュア・スイフト。うん。

于 2015-03-02T21:56:16.177 に答える
3

あなたは正しい軌道に乗っていました。invertedSetただし、NSCharSet で使用できます。つまり、 で設定したすべての文字を許可NSCharSetすることを意味します。その方が簡単だからです。それ以外の場合は、許可したくないすべての文字を確認する必要があります。これは、許可されたものを設定するよりもはるかに多くなっています。

var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
var unformatted = "american_samoa1"
var cleanedString = join("", unformatted.componentsSeparatedByCharactersInSet(charSet))

println(cleanedString) // "americansamoa"

ご覧のとおりjoin、作成した配列でメソッドを使用します。これは、文字列が本当に必要なためです。そうしないと、文字列の配列ができてしまいます。

于 2015-03-02T21:44:24.987 に答える
3

メソッドを置き換えるために、Swift 2.3 の以下の例を更新しましたjoin

let charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
let unformatted = "american_samoa1"
let cleanedString = unformatted.componentsSeparatedByCharactersInSet(charSet)).joinWithSeparator("")

print(cleanedString) // "americansamoa"
于 2016-08-16T05:08:45.977 に答える