すべての文字を削除したいのですが、必要なのは 0 ~ 9 の数字です
これを解決する例を教えてください。
独自の NSCharacterSet を作成し、invertedSet を使用して、含まれていないすべての文字を削除できます。次に例を示します。
NSString *stringWithLettersAndNumbers = @"345345345fff";
NSCharacterSet *myCharset = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
NSString *newString = [stringWithLettersAndNumbers stringByTrimmingCharactersInSet:[myCharset invertedSet]];
NSLog(@"%@",newString);
正規表現は、この種のものに最適です。
NSString *orgStr = @"letters34243more32132letters";
NSString *result = [orgStr stringByReplacingOccurrencesOfString: @"\\D"
withString: @""
options: NSRegularExpressionSearch
range: NSMakeRange(0, orgStr.length)];
これが行うことは、数字以外の文字 ( として定義\D
) を見つけて、それを空の文字列に置き換える、つまり削除することです。
文字列内の位置に関係なく、そのような文字に対してそれを行います。質問を読んだところ、これが必要なものです。
NSString リテラルは「実際の」ものをエスケープするために追加のバックスラッシュが必要なため、パターン文字列内の二重のバックスラッシュ (「\」) が必要です。
文字列をループして、すべての数字をピックアップします。
NSMutableString *strResult = [NSMutableString string];
for (int position=0; position<text.length; position++) {
unichar c = [text characterAtIndex:position];
NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet];
if ([numericSet characterIsMember:c]) {
[strResult appendFormat:@"%C", c];
}
}