2012-11-22 30 views

Trả lời

21

Bạn có thể chia chuỗi bằng NSCharacterSet. Hãy thử điều này

NSString *[email protected]"bozo__foo!!bar.baz"; 
NSString *sep = @"_!."; 
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:sep]; 
NSArray *temp=[test componentsSeparatedByCharactersInSet:set]; 
NSLog(@"temp=%@",temp); 
+0

công việc doest nếu 'sep' không phải là một ký tự. ví dụ. nếu tôi muốn chia cho '!!' thay vì '!' – Arefly

1
NSString *text = @"bozo__foo!!bar.baz"; 

NSArray *split1 = [text componentsSeparatedByString:@"__"]; 
NSArray *split2 = [[split1 lastObject] componentsSeparatedByString:@"!!"]; 
NSArray *split3 = [[split2 lastObject] componentsSeparatedByString:@"."]; 

NSLog(@"%@, %@, %@, %@", split1[0], split2[0], split3[0], split3[1]); 
+1

Điều đó sẽ không hoạt động nếu những chia tách không ra lệnh, nhưng vì trong trường hợp của tôi họ đang có, sau đó tôi đánh dấu nó như là trả lời . – Matoe

1

Tôi biết rằng câu hỏi này đã được trả lời nhưng đây là cách tách các chuỗi bằng nhiều chuỗi. Đây là danh mục để NSString.

- (NSArray<NSString *> *)componentsSeparatedByStrings:(NSArray<NSString *> *)separators 
{ 
    NSMutableArray<NSString *> *components = [[NSMutableArray alloc] init]; 
    unichar buffer[self.length + 1]; 
    NSInteger currentOrigin = 0; 
    NSInteger currentLength = 0; 

    [self getCharacters:buffer]; 

    for(NSInteger i = 0; i < self.length; i++) 
    { 
     unichar currentChar = buffer[i]; 

     currentLength++; 

     for(NSInteger n = 0; n < separators.count; n++) 
     { 
      NSString *currentDivider = [separators objectAtIndex:n]; 

      if(currentDivider.length == 0) 
      { 
       return @[self]; 
      } 
      else if(currentDivider.length > 1) 
      { 
       BOOL goodMatch = NO; 

       for(NSInteger x = 0; x < currentDivider.length; x++) 
       { 
        unichar charInDivider = [currentDivider characterAtIndex:x]; 

        if(charInDivider == currentChar) 
        { 
         goodMatch = YES; 
        } 
        else 
        { 
         goodMatch = NO; 
         break; 
        } 

        if(goodMatch == YES && ((x + 1) != currentDivider.length)) 
        { 
         i++; 
         currentLength++; 

         currentChar = buffer[i]; 
        } 
       } 

       if(goodMatch == YES) 
       { 
        NSRange newComponentRange = NSMakeRange(currentOrigin, (currentLength - currentDivider.length)); 
        NSString *newComponent = [self substringWithRange:newComponentRange]; 
        currentOrigin = (i + 1); 
        currentLength = 0; 

        [components addObject:newComponent]; 
        NSLog(@"%@", components); 
       } 
      } 
      else // If current divider is only one character long. 
      { 
       if([currentDivider characterAtIndex:0] == currentChar) 
       { 
        NSRange newComponentRange = NSMakeRange(currentOrigin, (currentLength - 1)); 
        NSString *newComponent = [self substringWithRange:newComponentRange]; 
        currentOrigin = (i + 1); 
        currentLength = 0; 

        [components addObject:newComponent]; 
        break; 
       } 
      } 
     } 

     // Handle the end of the string. 
     if((i + 1) == self.length) 
     { 
      NSRange newComponentRange = NSMakeRange(currentOrigin, currentLength); 
      NSString *newComponent = [self substringWithRange:newComponentRange]; 
      currentOrigin = 0; 
      currentLength = 0; 

      [components addObject:newComponent]; 
     } 
    } 

    return components; 
} 

Ví dụ: "ABCD__EFGHI__JKLMNOP-QRST.UV_WXYZ"

NSLog(@"%@", [test componentsSeparatedByStrings:@[@"__", @"-", @"."]]); 

Log Kết quả: "(ABCD, EFGHI, JKLMNOP, QRST, "UV_WXYZ")"

0

giải pháp Nhiều chức năng là để áp dụng -componentsSeparatedByString: đệ quy, đối với mỗi thành phần, được xuất phát trong ứng dụng phân tách trước đó:

NSString Thể loại

- (NSMutableArray<NSString *> *)gvr_componentsSeparatedByStrings:(NSArray<NSString *> *)separators { 
    if (separators.count == 0) { 
     return [NSMutableArray arrayWithObject:self]; 
    } 

    NSString *separator = [separators firstObject]; 

    NSArray *reducedSeparators = [separators gvr_arrayByRemovingFirstObject]; 

    NSArray *components = [self componentsSeparatedByString:separator]; 

    NSMutableArray *result = [NSMutableArray new]; 

    for (NSString *component in components) { 
     NSMutableArray *subResult = [component gvr_componentsSeparatedByStrings:reducedSeparators]; 

     [result addObjectsFromArray:subResult]; 
    } 

    return result; 
} 

NSArray Thể loại

- (NSArray *)gvr_arrayByRemovingFirstObject { 
    NSMutableArray *result = [NSMutableArray new]; 
    for (NSInteger i = 1; i < self.count; i++) { 
     [result addObject:self[i]]; 
    } 

    return [result copy]; 
} 
Các vấn đề liên quan