如何从包含字符串和数字的字符串中使用NSScanner获取字符串?
即。 001234852ACDSB
结果应为001234852和ACDSB
我可以使用NSScanner和字符使用 stringByReplacingOccurrencesOfString 从字符串中获取数字,但我想知道,是否可以通过使用NSScanner或任何其他内置方法来获取字符串?
我想知道正则表达式。
答案 0 :(得分: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]+)
答案 1 :(得分: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
}
答案 2 :(得分: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