2012-05-22 62 views
0

我需要将子字符串转换为NSString中的第二个逗号。子字符到第n个字符

输入:

NSString *input = @"title, price, Camry, $19798, active"; 

所需的输出:

NSString *output = @"title, price"; 

谢谢!

UPDATE:

我有以下,但问题是它需要跳过最后一个逗号:

NSString *output = [input rangeOfString:@"," options:NSBackwardsSearch]; 
+0

您可以对 - [NSString rangeOfString:]:进行嵌套调用,然后查找第二个逗号的索引,然后对整个输入进行子串处理。 – mservidio

回答

3

这段代码应该做你需要的东西:

NSString *input = @"title, price, Camry, $19798, active"; 

NSArray *array = [input componentsSeparatedByString:@","]; 

NSArray *subArray = [array subarrayWithRange:NSMakeRange(0, 2)]; 

NSString *output = [subArray componentsJoinedByString:@","]; 

NSLog(output); 
0

你可以尝试这样的事情:

NSArray *items = [list componentsSeparatedByString:@", "]; 
NSString result = @""; 
result = [result stringByAppendingString:[items objectAtIndex:0]]; 
result = [result stringByAppendingString:@", "]; 
result = [result stringByAppendingString:[items objectAtIndex:1]]; 

你必须如果你想避免异常,检查你是否至少有两件物品。

3

试试这个:

- (NSString *)substringOfString:(NSString *)base untilNthOccurrence:(NSInteger)n ofString:(NSString *)delim 
{ 
    NSScanner *scanner = [NSScanner scannerWithString:base]; 
    NSInteger i; 
    for (i = 0; i < n; i++) 
    { 
     [scanner scanUpToString:delim intoString:NULL]; 
     [scanner scanString:delim intoString:NULL]; 
    } 
    return [base substringToIndex:scanner.scanLocation - delim.length]; 
} 
1

你可以分裂 - >接头 - >加入该字符串像这样在objc:

NSString *input = @"title, price, Camry, $19798, active"; 
// split by ", " 
NSArray *elements = [input componentsSeparatedByString: @", "]; 
// grab the subarray 
NSArray *subelements = [elements subarrayWithRange: NSMakeRange(0, 2)]; 
// concat by ", " again 
NSString *output = [subelements componentsJoinedByString:@", "]; 
0

有真的没有错,只是写代码来执行你想要什么。例如:

int commaCount = 0; 
int i; 
for (i = 0; i < input.count; i++) { 
    if ([input characterAtIndex:i] == (unichar) ',') { 
     commaCount++; 
     if (commaCount == 2) break; 
    } 
} 

NSString output = nil; 
if (commaCount == 2) { 
    output = [input substringToIndex:i]; 
} 
0

您可以创建一个NSString分类处理发现的任何字符串的第n个出现。这是ARC的例子。

//NSString+MyExtension.h 

@interface NSString(MyExtension) 
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
          ofString:(NSString*)string; 
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
          ofString:(NSString*)string 
          options:(NSStringCompareOptions)options; 
@end 
@implementation NSString(MyExtension) 
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
          ofString:(NSString*)string 
{ 
    return [self substringToNthOccurrence:nth ofString:string options:0]; 
} 
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
          ofString:(NSString*)string 
          options:(NSStringCompareOptions)options 
{ 
    NSUInteger location = 0, 
     strlength = [string length], 
     mylength = [self length]; 

    NSRange range = NSMakeRange(location, mylength); 

    while(nth--) 
    { 
     location = [self rangeOfString:string 
           options:options 
           range:range].location; 
     if(location == NSNotFound || (location + strlength) > mylength) 
     { 
      return [self copy]; //nth occurrence not found 
     }   
     if(nth == 0) strlength = 0; //This prevents the last occurence from being included 

     range = NSMakeRange(location + strlength, mylength - strlength - location); 
    }   
    return [self substringToIndex:location]; 
} 
@end 

//main.m 
#import "NSString+MyExtension.h" 
int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     NSString *output = [@"title, price, Camry, $19798, active" substringToNthOccurrence:2 ofString:@","]; 
     NSLog(@"%@", output); 
    } 
} 

* 我会离开它作为一个练习的人来实现可变版本。

相关问题