【问题标题】:Find characters from the given string with numbers.从给定的字符串中查找带有数字的字符。
【发布时间】:2011-10-16 09:55:00
【问题描述】:

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

即001234852ACDSB

结果应该是 001234852 和 ACDSB

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

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

【问题讨论】:

  • 不清楚您在问什么...您想使用 NSScanner 从字符串中获取字符串吗?您是否要删除所有数字并仅获取字母?请举例说明样本输入及其预期输出。
  • 他似乎想将数字与字母分开,并得到一个带有数字的字符串和一个带有字母的字符串。尽管他没有这么说,但我假设数字在字符串的一部分中并在一起,而字母在其余部分中,或者它们交替出现。

标签: iphone objective-c regex nsstring nsscanner


【解决方案1】:

如果您可以保证字符串始终由数字后跟字母组成,那么您可以使用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]+)

【讨论】:

  • 谢谢先生。这段代码对我有部分帮助,因为它根本不能保证数字和字母的位置。
【解决方案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
    }

【讨论】:

    【解决方案3】:

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

    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

    【讨论】:

    • 感谢您的回复。要求是使用 NSScanner 完成任务,这就是为什么必须玩边界。:)
    • Np。只需查看附加的链接,它就有使用扫描仪的答案。
    猜你喜欢
    • 2017-05-26
    • 2023-01-19
    • 1970-01-01
    • 2012-04-20
    • 2020-11-08
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多