2 番目のものにはいつでも 'rangeOfString:options:range:' を使用できます (最初のものの 'location' の後から開始)。
オプション1
- (NSRange)rangeOfQuoteInString:(NSString *)str {
int firstMatch = [str rangeOfString:@"\""].location;
int secondMatch = [str rangeOfString:@"\"" options:0 range:NSMakeRange(firstMatch + 1, [str length] - firstMatch - 1)].location;
return NSMakeRange(firstMatch, secondMatch + 1 - firstMatch);
}
これが正しいことを願っています。夕食時に電話で完了しました。;-)
もう 1 つ、文字列の範囲も同様の実装を行う可能性が高いため、文字列内の 'char' 値を繰り返し、一致する #1 と #2 を探してみませんか? 同じかそれよりも速い可能性があります。
オプション 2
- (NSRange)rangeOfQuoteInString:(NSString *)str {
int firstMatch = -1;
int secondMatch = -1;
for (int i = 0; i < [str length]; i = i + 1) {
unichar c = [str characterAtIndex:i];
if (c == '"') {
if (firstMatch == -1) {
firstMatch = i;
} else {
secondMatch = i;
break;
}
}
}
if (firstMatch == -1 || secondMatch == -1) {
// No full quote was found
return NSMakeRange(NSNotFound, 0);
} else {
return NSMakeRange(firstMatch, secondMatch + 1 - firstMatch);
}
}