0

Objective Cを使用して、大文字化に基づいてNSStringを分割するための最良の方法は何でしょうか。@"MyNameOfSomething" --> [NSArray arrayWithObjects: @"My", @"Name", @"Of, @"Something"].

プログラムの他の部分には正規表現機能が必要ないため、サードパーティの正規表現ライブラリを使用せずにこれを実行したいと思います。

更新: iOS5 / Lionより古いバージョンをターゲットにしているので、NSRegularExpressionはありません。これはNSScannerで実行できることは知っていますが、誰かが既成のソリューションを持っていることを望んでいました。

4

3 に答える 3

1

iOS5 / Mac OSX 10.7を使用している場合は、NSRegularExpressionを使用して大文字の位置を取得できます。(次にsubstringWithRangeを使用します:)下位互換性が必要な場合は、NSScannerが(非効率的な)友達です。

于 2011-12-09T00:49:45.623 に答える
1

これを行うには、正規表現を使用できます。http://rubular.comを使用して正規表現をテストし、RegexKitLite(http://regexkit.sourceforge.net/RegexKitLite/)を使用してアプリケーションに正規表現の機能を追加します。

トリックを実行する必要がある正規表現は次のとおりです(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

これは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 に答える