如何分离NSString数据

时间:2014-02-07 14:11:24

标签: ios iphone objective-c nsstring nsscanner

我有一个NSString *字符串;

String =“ID:12 34 56 78 Class:C”

现在我想区分一个变量中的ID数据和另一个变量中的Class数据, 我如何将这两个与单个字符串

分开

我用过:

NSScanner* Scanner = [NSSCanner ScannerWithString:@"String"]
 NSCharacterSet* seperator = [NSCharacterSet CharacterSetWithCharacterInString:@":"];  
 NSString* text; 

 while([Scanner isAtEnd] == NO)
 {
    [Scanner ScanUpToCharacterFromSet:Seperator intoString:@"text"];
    [Scanner scanUpToCharactersFromSet:newLine intoString:NULL];             
    NSLog(@"%@",text);

 }

这不会将我的String与ID和Class分开,告诉我该怎么做 我的O / p应该是:

12 34 56 78

C

这是一个场景我有一些字符串数组,每个我想用另一个关键字分隔我的字符串....

2 个答案:

答案 0 :(得分:2)

使用NSString的rangeOfString函数

NSString *myString = @"ID: 12 34 56 78 Class:C";
NSRange range = [myString rangeOfString:@"Class"];
NSString *idStr = [myString substringToIndex:range.location];
NSString *classStr = [myString substringFromIndex:range.location];
NSLog(idStr);
NSLog(classStr);

我在我的日志中得到了这个

2014-02-07 15:56:29.951 Hello[5493:903] ID: 12 34 56 78 
2014-02-07 15:56:29.959 Hello[5493:903] Class:C

答案 1 :(得分:0)

正则表达式是可行的方法。

首先创建你的NSRegularExpression:

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"ID:(.*?)Class:(.*?)" options:0 error:&error];

这样你就可以创建一个正则表达式来匹配括号中的内容。然后,将您的常规表达与您的字符串匹配:

NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:0];

NSArray *matchArray = [regex matchesInString:yourString options:0 range:NSMakeRange(0, [yourString length])];
for(NSTextCheckingResult *result in matchArray)
{
    if(result.range.location != NSNotFound)
    {
        NSInteger rlen = result.numberOfRanges;
        for(NSInteger i=1;i<rlen;i++)
        {
            NSRange range = [result rangeAtIndex:i];
            [resultArray addObject:[yourString substringWithRange:range]];
        }
    }
}

在此之后你会有这个:

resultArray [0] =&gt;身份证数据, resultArray [1] =&gt;班级数据

您可能需要调整正则表达式以跳过空白,但基本上就是这样。