73

から英数字以外の文字をすばやく簡単に削除する方法を探していNSStringます。おそらく、を使用したものNSCharacterSetですが、私は疲れていて、文字列に英数字のみを含む文字列を返すものは何もないようです。

4

9 に答える 9

148

分割してから結合することでこれを行うことができます。componentsSeparatedByCharactersInSet には OS X 10.5 以降が必要です。

NSCharacterSet *charactersToRemove = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSString *strippedReplacement = [[someString componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""];
于 2011-07-02T02:20:14.663 に答える
21

Swift では、componentsJoinedByStringは に置き換えられるjoin(...)ため、ここでは英数字以外の文字をスペースに置き換えるだけです。

let charactersToRemove = NSCharacterSet.alphanumericCharacterSet().invertedSet
let strippedReplacement = " ".join(someString.componentsSeparatedByCharactersInSet(charactersToRemove))

Swift2 の場合 ...

var enteredByUser = field.text .. or whatever

let unsafeChars = NSCharacterSet.alphanumericCharacterSet().invertedSet

enteredByUser = enteredByUser
         .componentsSeparatedByCharactersInSet(unsafeChars)
         .joinWithSeparator("")

1文字だけを削除したい場合、たとえば、すべてのリターンを削除します...

 enteredByUser = enteredByUser
         .componentsSeparatedByString("\n")
         .joinWithSeparator("")
于 2014-10-13T10:25:16.733 に答える
19

私が最終的にやったのは、NSCharacterSet と-invertedSet私が見つけたメソッドを作成することでした (ドキュメントを読む能力のために余分な 1 時間の睡眠が何をするのか不思議です)。someStringこれが英数字以外の文字を削除する文字列であると仮定した場合のコード スニペットは次のとおりです。

NSCharacterSet *charactersToRemove =
[[ NSCharacterSet alphanumericCharacterSet ] invertedSet ];

NSString *trimmedReplacement =
[ someString stringByTrimmingCharactersInSet:charactersToRemove ];

trimmedReplacementsomeStringの英数字が含まれます。

于 2009-11-01T16:01:01.597 に答える
0

以下は、拡張機能としてのCameron のカテゴリのSwift バージョンです。

extension String {

    func stringByStrippingCharactersInSet(set:NSCharacterSet) -> String
    {
        return (self.componentsSeparatedByCharactersInSet(set) as NSArray).componentsJoinedByString("")
    }

    func stringByCollapsingWhitespace() -> String
    {
        var components:NSArray = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
        let predicate = NSPredicate(format: "self <> ''", argumentArray: nil)
        components = components.filteredArrayUsingPredicate(predicate)

        return components.componentsJoinedByString(" ")
    }
}
于 2015-01-26T00:50:54.760 に答える