2011-12-09 2 views
0

Objective C를 사용하여 대문자 기준으로 NSString을 분할하는 가장 좋은 방법은 무엇입니까? @"MyNameOfSomething" --> [NSArray arrayWithObjects: @"My", @"Name", @"Of, @"Something"].Objective C에서 대문자 (대문자)를 기반으로 NSString을 분할하는 방법은 무엇입니까?

타사 regex 라이브러리를 사용하지 않고이 작업을 수행하고 싶습니다. 프로그램의 정규식 기능을 필요로하지 않기 때문입니다.

업데이트 : 저는 iOS5/Lion보다 이전 버전을 대상으로하므로 NSRegularExpression이 없습니다. 나는 이것이 NSScanner로 할 수 있다는 것을 알고 있지만, 누군가 기성품 해결책을 가지기를 바랬다.

답변

1

iOS5/Mac OSX 10.7을 사용하는 경우 NSRegularExpression을 사용하여 대문자로 된 문자의 위치를 ​​얻을 수 있습니다. (그리고 substringWithRange :)를 사용하십시오. 하위 호환성이 필요하면 NSScanner가 (비효율적 인) 친구가됩니다.

+0

아아를 내 전개 대상 10.5, 그래서 아무 NSRegularExpression입니다. NSScanner가 확실한 선택이지만 바퀴를 다시 발명해야하는 번거 로움을 덜어주기를 바랍니다. – svth

+2

NSScanner는 비효율적이지 않습니다. 그것은 단지 더 많은 코드입니다. –

+0

@KevinBallard 잘 NSScanner 자체는 비효율적이지 않지만 작성해야하는 코드는 상당히 많습니다. 일반적으로 코드가 많으면 효율적이지 않습니다. –

1

정규 표현식을 사용하면이 작업을 수행 할 수 있습니다. http://rubular.com을 사용하여 정규 표현식을 테스트하고 RegexKitLite (http://regexkit.sourceforge.net/RegexKitLite/)를 사용하여 응용 프로그램에 Regex 기능을 추가하십시오. 여기

은 (는있는 NSString에서 모두 대문자 선택) 트릭을 할해야 정규 표현식이다 : 나는 확실하지 않다 [A-Z]

을,하지만 난 당신이 당신이 원하는 일을하기 위해이 방법 - (NSArray *)componentsSeparatedByRegex:(NSString *)regex options:(RKLRegexOptions)options range:(NSRange)range error:(NSError **)error;을 활용할 수있을 것 같아요 .

이 기능은 10.5에서 작동하며 구현하기가 간단합니다.

1

저는 NSScanner를 사용하여이 작업을 수행 할 수 있음을 알고 있습니다.하지만 누군가 기성품 솔루션을 갖고 있기를 바랍니다. 여기

당신이 이동 :

NSString *chopString = stringToSplit.copy; /// @"stringToSplit" Goes Here 
    NSString *resultingString; 

    NSCharacterSet *capsSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"]; 

    while (chopString.length > 0) { 

     /// Pull the first character out each time /// 
     /// Since it may trigger the Scanner /// 
     NSString *firstChar = [chopString stringByReplacingCharactersInRange:(NSRange){1, chopString.length-1} withString:@""]; 
     chopString = [chopString stringByReplacingCharactersInRange:(NSRange){0,1} withString:@""]; 

     /// Scan up to the next Capital letter /// 
     NSString *upToString; 
     NSScanner *chopScanner = [NSScanner scannerWithString: chopString]; 
     [chopScanner scanUpToCharactersFromSet:capsSet intoString:&upToString]; 

     /// Feed first character and scan results into string /// 
     /// Separated by a space /// 
     if (!resultingString) 
      resultingString = [NSString stringWithFormat:@"%@%@",firstChar,upToString]; 
     else 
      resultingString = [NSString stringWithFormat:@"%@ %@%@", resultingString,firstChar,upToString]; 

     /// Chop the remaining string down by the length of the scan /// 
     chopString = [chopString stringByReplacingCharactersInRange:(NSRange){0,chopScanner.scanLocation} withString:@""]; 
    } 

    resultingString = [resultingString capitalizedString]; /// @"String To Split" Comes Out! 
+0

코드 조각을 게시하면 도움이되지 않을 수도 있습니다. 설명을 좀 해주세요. –

+0

추가 된 컨텍스트. 감사. – AlternateRealist

관련 문제