4

1つまたは複数の単語を見つける必要があります。しかし、この方法では、私は一言も見つけます。

NSString *searchString = [NSString stringWithFormat:@"%@",searchField.text];
NSRange range = [textString rangeOfString : searchString];

    if (range.location != NSNotFound) {


        NSLog(@"textString = %@", textString);

    }

私は単語/正確な単語が必要です

どのようにできるのか?

ありがとうございました!

4

2 に答える 2

3

NSStringでサブ文字列を解析/検索するには、さまざまな方法があります。

  • NSString自体
  • NSRegularExpression。単語の周りの空白を囲むシナリオに取り組むことができるので、これはおそらくあなたのニーズにより適しているでしょう。したがって、を検索するときにcatfromは返されません。catapultcat
  • NSScanner (おそらくあなたのニーズにはやり過ぎです)

...そしてもちろん、それぞれに長所と短所があります。

NSStringには、「文字とサブストリングの検索」の下にグループ化された9つのメソッドがあります。次のような方法:

-rangeOfString:
レシーバー内で指定された文字列が最初に出現する範囲を検索して返します。

NSRegularExpressionには、「正規表現を使用した文字列の検索」の下にグループ化された5つのメソッドがあります。次のような方法:

-numberOfMatchesInString:options:range:
文字列の指定された範囲内の正規表現の一致数を返します。

NSScannerについて知っておくと便利な場合もありますが、このクラスは、単にサブパーツを探すよりも、文字列を解析する場合に役立ちます。

于 2012-04-30T19:44:08.870 に答える
2

次のように、検索文字列の最後にスペースを追加するとどうなりますか。

NSString *searchString = [NSString stringWithFormat:@"%@ ",searchField.text];

の文字列がsearchField.textすでにスペースで終わっている場合は、それを削除する必要があります。

これはまだ完全な解決策ではありません。たとえば、検索文字列が文の終わりにある場合、検索文字列は見つかりません。代わりに、空白文字を追加するのではなく、ヒット後の文字を見て、それが文字ではないことを確認することができます。これについては、クラスを見てくださいNSCharacterSet

NSCharacterSet * letters = [NSCharacterSet letterCharacterSet];
if (![letters characterIsMember:[textString characterAtIndex:(range.location+searchString.length)]]) {
... 
}
于 2012-04-30T19:19:29.480 に答える