iPhone SDK - 从字符串中删除所有数字,只保留字符a-z。

7

在我的应用程序中,我想从字符串中删除除a-z字符以外的数字。如何只获取字符?


2
你的目标SDK/操作系统是哪个版本? - jv42
3个回答

26

这是一个简短的答案,不需要任何冗长的编码

NSString *newString = [[tempstr componentsSeparatedByCharactersInSet:
                            [[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""];`

Swift 3:

(tempstr.components(separatedBy:NSCharacterSet.letters.inverted)).joined(separator: "")

例如:

("abc123".components(separatedBy:NSCharacterSet.letters.inverted)).joined(separator: "")

1
NSString *stringToFilter = @"filter-me";


    NSMutableString *targetString = [NSMutableString string];


    //set of characters which are required in the string......
    NSCharacterSet *okCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];


    for(int i = 0; i < [stringToFilter length]; i++)
    {
        unichar currentChar = [stringToFilter characterAtIndex:i];
        if([okCharacterSet characterIsMember:currentChar]) 
        {
            [targetString appendFormat:@"%C", currentChar];
        }
    }


    NSLog(targetString);    


    [super viewDidLoad];
}

这是一个给我的答案,而且可以正常工作


0
我找到了答案: 来自从NSString中删除除数字以外的所有内容
NSString *originalString = @"(123) 123123 abc";

NSLog(@"%@", originalString);
NSMutableString *strippedString = [NSMutableString 
                                   stringWithCapacity:originalString.length];

NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *numbers = [NSCharacterSet 
                           characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];

while ([scanner isAtEnd] == NO) {
    NSString *buffer;
    if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
        [strippedString appendString:buffer];

    } else {
        [scanner setScanLocation:([scanner scanLocation] + 1)];
    }
}

NSLog(@"%@", strippedString);

我不是Xcode的专家,但是执行这个简单任务难道没有更简单的解决方案吗? - Déjà vu
我很惊讶这之前没有被发现,但是这个答案被逐字从 stackoverflow.com/questions/1129521/remove-all-but-numbers-from-nsstringst 复制过来了,像这样抄袭别人的答案是不好的。 - Popeye
抱歉,我不知道这个链接。实际上,这是我的一个朋友给出的答案,所以我只是在这里复制了一下。无论如何,我会将您的链接作为参考添加进去。 - Saikiran Komirishetty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接