0

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

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

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

4

3 回答 3

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,而且实现起来非常简单!

于 2011-12-09T02:25:26.893 回答
1

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

于 2011-12-09T00:49:45.623 回答
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!
于 2015-09-07T00:54:59.123 回答