1

如何使用 NSScanner 从包含字符串和数字的字符串中获取字符串?

即001234852ACDSB

结果应该是 001234852 和 ACDSB

我可以使用 NSScanner 从字符串中获取数字,并通过使用stringByReplacingOccurrencesOfString从字符中获取数字,但我想知道,是否可以使用 NSScanner 或任何其他内置方法获取字符串?

我想知道同样的正则表达式。

4

3 回答 3

2

如果您可以保证字符串始终由数字后跟字母组成,那么您可以执行以下操作NSScanner

NSScanner *scanner = [NSScanner scannerWithString:@"001234852ACDSB"];

NSString *theNumbers = nil;

[scanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet]
                    intoString:&theNumbers];

NSString *theLetters = nil;
[scanner scanCharactersFromSet:[NSCharacterSet letterCharacterSet]
                    intoString:&theLetters];

捕获相同事物的正则表达式如下所示:

([0-9]+)([a-zA-Z]+)
于 2011-07-30T05:53:27.077 回答
2

最后在谷歌搜索并浏览了一些来自网络的信息之后,我到达了我的目的地。有了这个,我发布了代码,这可能会帮助许多与我面临同样问题的人。

    NSString *str = @"001234852ACDSB";
    NSScanner *scanner = [NSScanner scannerWithString:str];

    // set it to skip non-numeric characters
    [scanner setCharactersToBeSkipped:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];

    int i;
    while ([scanner scanInt:&i])
    {
        NSLog(@"Found int: %d",i);    //001234852
    }

    // reset the scanner to skip numeric characters
    [scanner setScanLocation:0];
    [scanner setCharactersToBeSkipped:[NSCharacterSet decimalDigitCharacterSet]];

    NSString *resultString;
    while ([scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&resultString])
    {
        NSLog(@"Found string: %@",resultString);    //ACDSB
    }
于 2011-08-01T04:18:23.437 回答
0

您不必使用扫描仪来执行此操作。

NSString *mixedString = @"01223abcdsadf";

NSString *numbers = [[mixedString componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];

NSString *characters = [[mixedString componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnouprstuwvxyz"] invertedSet]] componentsJoinedByString:@""];

对于其他可能的解决方案,请查看此问题Remove all but numbers from NSString

于 2011-07-30T05:48:02.077 回答