2013-03-22 2 views
0

Предположим, у меня есть следующая строка:Обнаружение специфического фрагмента строки в NSString

Mary had a little lamb, she also had a little sheep.

Моя цель состоит в том, чтобы извлечь каждое слово после had и до периода. (В этом случае a little sheep).

Я попробовал этот путь:

- (NSInteger)indexOf:(NSString*)substring from:(NSInteger)starts { 
    NSRange r; 
    r.location = starts; 
    r.length = [self length] - r.location; 

    NSRange index = [self rangeOfString:substring options:NSLiteralSearch range:r]; 
    if (index.location == NSNotFound) { 
     return -1; 
    } 
    return index.location + index.length; 
} 

Как и в:

NSInteger sheepSpot = [string indexOf:@"had" from:23];

// I know that I want to grab everything after the index of sheepSpot but before the period. 
// Suppose now that I have an arbitrary number of periods in the sentence, how can I extract the above text without getting the wrong thing? 
+0

что бы результат для строки, как это '@«была Мэри была маленькая овечка, она также имела у littlhade овец.»;' –

ответ

1

Попробуйте это:

-(NSRange)lastRangeOf:(NSString *)substring inString:(NSString *)string{ 
    return [string rangeOfString:substring options:NSBackwardsSearch]; 
} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 
    NSString *[email protected]"had Mary had a little lamb, she also had a had little sheep."; 
    NSString *[email protected]"had"; 
    NSRange hadRange=[self lastRangeOf:word inString:string]; 
    NSInteger start=hadRange.location+word.length; 
    NSInteger lengthToCut=string.length-start; 
    NSString *substring=[string substringWithRange:NSMakeRange(start,lengthToCut)]; 
    NSLog(@"->%@",substring); 
} 
+0

Почему вы цикл в методе 'lastRangeOf: inString:'? Почему бы не использовать метод rangeOfString: options: 'и передать' NSBackwardsSearch' для параметров. Нет необходимости в цикле. – rmaddy

+0

@rmaddy: О да, не знал об этом апи. –

+0

@rmaddy: Спасибо, друг, теперь этот код слишком мал. –

1

Этот код будет найти последний «был "и las т период и дать вам все, что между ними:

NSString *text = @"Mary had a little lamb, she also had a little sheep."; 
NSString *subtext = nil; 
NSRange lastHadRange = [text rangeOfString:@"had" options:NSBackwardsSearch]; 
if (lastHadRange.location != NSNotFound) { 
    NSRange lastPeriodRange = [text rangeOfString:@"." options:NSBackwardsSearch]; 
    if (lastPeriodRange.location != NSNotFound) { 
     NSUInteger start = lastHadRange.location + lastHadRange.length; 
     NSUInteger length = lastPeriodRange.location - start; 
     subtext = [text substringWithRange:NSMakeRange(start, length)]; 
    } 
} 

NSLog(@"Subtext is: %@", subtext); 
Смежные вопросы