Как разбить строку? - PullRequest
       38

Как разбить строку?

2 голосов
/ 28 марта 2011

У меня есть строка из трех строк, как эта

NSString *first = ..;
NSString *second = ..;
NSString *third = ..;

NSString joinedString;
joinedString = [NSString stringWithFormat:@"%@ - %@ (%@)", first, second, third];

Теперь мне нужно вернуть три оригинальные строки из joinedStringЯ где-то читал, что я должен использовать NSScanner для этого.Есть идеи, как это может работать?

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

Учитывая пример, который вы привели в своем вопросе, вы можете сделать следующее:

// characters we are going to split at
NSString *sep = @" -()";
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:sep];
NSArray *strings = [joinedString componentsSeparatedByCharactersInSet:set];

// This is the simple way provided that the strings doesn't have spaces in them.

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

1 голос
/ 28 марта 2011

Вы можете использовать componentsSeparatedByCharactersInSet::

NSString *chars = @"-()";
NSArray *split = [joinedString componentsSeparatedByCharactersInSet:[NSCharacterset characterSetWithCharactersInString:chars]];

Затем вы можете обрезать начальный / конечный пробелы:

stringFromArray = [stringFromArray stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
1 голос
/ 28 марта 2011

Если вы получили точный шаблон, упомянутый в вашем посте, вы можете использовать NSRegularExpression (iOS 4 +):

NSString *regexStr = @"(.*)\s-\s(.*)\s\((.*)\)";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:nil];
NSArray *results = [regex matchesInString:joinedString options:0 range:NSMakeRange(0, [joinedString length])];
NSString *string1 = [results objectAtIndex:0];
...

(без обработки ошибок и не в состоянии проверить это прямо сейчас)

...