Как разделить строку NSS на основе заглавных букв (то есть заглавных букв) в задаче C? - PullRequest
0 голосов
/ 09 декабря 2011

Используя Objective C, какой будет лучший способ разбить строку NSSt на основе заглавных букв, например, @"MyNameOfSomething" --> [NSArray arrayWithObjects: @"My", @"Name", @"Of, @"Something"].

Я хотел бы сделать это без использования сторонней библиотеки регулярных выражений, так как я не будунужна функциональность регулярных выражений для всего остального в программе.

ОБНОВЛЕНИЕ: Я нацеливаюсь на более старые версии, чем iOS5 / Lion, поэтому нет NSRegularExpression.Я знаю, что это можно сделать с помощью NSScanner, но я надеялся, что у кого-нибудь есть готовое решение.

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Вы можете использовать регулярное выражение, чтобы сделать это.Используйте http://rubular.com для проверки ваших регулярных выражений и RegexKitLite (http://regexkit.sourceforge.net/RegexKitLite/) для добавления функциональности Regex в ваше приложение.

Вот регулярное выражение, которое должно сработать (оно выбирает все заглавные буквы)в строке NSS): [A-Z]

Я не уверен, но я думаю, что вы можете воспользоваться этим методом - (NSArray *)componentsSeparatedByRegex:(NSString *)regex options:(RKLRegexOptions)options range:(NSRange)range error:(NSError **)error;, чтобы сделать то, что вы хотите.

Преимущество этогоэто работает на 10.5, и это действительно просто реализовать!

1 голос
/ 07 сентября 2015

Я знаю, что это можно сделать с помощью 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!
1 голос
/ 09 декабря 2011

Если вы используете iOS5 / Mac OSX 10.7, вы можете использовать NSRegularExpression, чтобы получить позиции заглавных букв. (а затем используйте substringWithRange :) Если вам нужна обратная совместимость, NSScanner - ваш (неэффективный) друг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...