如何使用 NSScanner 从包含字符串和数字的字符串中获取字符串?
即001234852ACDSB
结果应该是 001234852 和 ACDSB
我可以使用 NSScanner 从字符串中获取数字,并通过使用stringByReplacingOccurrencesOfString从字符中获取数字,但我想知道,是否可以使用 NSScanner 或任何其他内置方法获取字符串?
我想知道同样的正则表达式。
如何使用 NSScanner 从包含字符串和数字的字符串中获取字符串?
即001234852ACDSB
结果应该是 001234852 和 ACDSB
我可以使用 NSScanner 从字符串中获取数字,并通过使用stringByReplacingOccurrencesOfString从字符中获取数字,但我想知道,是否可以使用 NSScanner 或任何其他内置方法获取字符串?
我想知道同样的正则表达式。
如果您可以保证字符串始终由数字后跟字母组成,那么您可以执行以下操作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]+)
最后在谷歌搜索并浏览了一些来自网络的信息之后,我到达了我的目的地。有了这个,我发布了代码,这可能会帮助许多与我面临同样问题的人。
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
}
您不必使用扫描仪来执行此操作。
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