0

次の文字列があるとします。

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?
4

2 に答える 2

1

これを試してください:

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

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    NSString *string=@"had Mary had a little lamb, she also had a had little sheep.";
    NSString *word=@"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);
}
于 2013-03-22T03:49:38.883 に答える
1

このコードは、最後の「持っていた」と最後の期間を見つけて、その間のすべてを提供します。

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);
于 2013-03-22T04:24:24.097 に答える