0

ドキュメントから、すべての rangeOfString メソッドとそのバリアントが文字列の最初の出現を見つけることがわかりました。したがって、「I can have I or not」という文字列がある場合、「I」の 2 番目のインスタンスをキャッチすることはありません。NSBackwardsSearch 演算子を使用できますが、最後は検索されますが、最初は検索されません。

私がやろうとしているのは、ビューでステッパーを使用して、文のすべての単語に順番に下線を引くことです。しかし、以前に遭遇した同じ単語を見つけたときに問題が発生します。これは、現在の場所である 2 番目の出現ではなく、その単語の 1 番目の出現に下線が引かれるためです。

rangeOfString を使用して以前の文字列の出現を無視する方法に関する提案はありますか? または、これを達成できる別の方法はありますか?

-ヨハネス

4

3 に答える 3

3

メソッドの 1 つを使用して、-rangeOfString:options:range:...既に見つかったものの後に範囲を渡します。

于 2013-03-31T11:42:13.770 に答える
1
NSString *str = @"I can have I or not";

NSUInteger count = 0, length = [str length];
NSRange range = NSMakeRange(0, length);
while(range.location != NSNotFound)
{
    range = [str rangeOfString: @"I" options:0 range:range];
    if(range.location != NSNotFound)
    {
        range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
        NSLog(@"found %@",NSStringFromRange(range));
        count++; 
    }
}
于 2013-03-31T12:47:06.613 に答える