如何根据Objective C中的大小写(即大写字母)拆分NSString?

时间:2011-12-09 00:47:29

标签: objective-c nsstring split capitalization

使用Objective C,基于大小写分割NSString的最佳方法是什么,例如: @"MyNameOfSomething" --> [NSArray arrayWithObjects: @"My", @"Name", @"Of, @"Something"].

我想在不使用第三方正则表达式库的情况下执行此操作,因为我不需要程序中任何其他内容的正则表达式功能。

更新:我的目标是iOS5 / Lion以上的旧版本,因此没有NSRegularExpression。我知道这可以用NSScanner完成,但我希望有人有一个现成的解决方案。

3 个答案:

答案 0 :(得分:1)

如果您使用的是iOS5 / Mac OSX 10.7,则可以使用NSRegularExpression获取大写字母的位置。 (然后使用substringWithRange :)如果你需要向后兼容性,NSScanner是你(低效)的朋友。

答案 1 :(得分: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,实现起来非常简单!

答案 2 :(得分: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!