2012-05-22 4 views
0

NSString의 두 번째 쉼표로 부분 문자열을 사용해야합니다.n 번째 문자의 부분 문자열

입력 :

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

원하는 출력 :

NSString *output = @"title, price"; 

감사합니다!

UPDATE :

I가 다음하지만 문제는 마지막 쉼표를 생략 할 필요가있다 :

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

당신은에 있습니다

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

당신이 뭔가를 시도 할 수 있습니다 예외를 피하려면 최소한 두 항목이 있는지 확인하십시오.

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

당신은 문자열의 n 번째 발생을 찾아 처리 할 NSString 카테고리를 만들 수 있습니다. 이것은 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); 
    } 
} 

* 나는 운동으로 떠날거야.