2012-04-30 45 views
4

我需要找到一個單詞或幾個單詞。然而,用這種方法,我也發現了一塊詞。搜索NSString中的確切單詞

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

    if (range.location != NSNotFound) { 


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

    } 

我需要的字/詞精確

我該怎麼辦?

謝謝!

回答

3

有分析各種方式/在尋找NSString的子字符串:

  • 的NSString本身
  • NSRegularExpression。這可能會更好地滿足您的需求,因爲您可以處理圍繞單詞的空白周圍的情景。因此當搜索cat時將不會從catapult返回cat
  • NSScanner (最有可能矯枉過正,你需要)

...他們,當然,各有各的優點和缺點。

NSString有9個方法分組在「查找字符和子字符串」下。方法如:

-rangeOfString:
查找並返回接收器內的給定的字符串的第一個匹配的範圍內。

NSRegularExpression有5種方法分組在「使用正則表達式搜索字符串」下。方法如:

-numberOfMatchesInString:選擇:範圍:
返回字符串的指定範圍內的正則表達式的匹配的數目。

瞭解NSScanner也許會有幫助,但是如果您解析字符串而不是簡單地查找子部分,則此類更有用。

2

,如果你在搜索字符串的末尾添加一個空格,像這樣會出現什麼情況:

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

如果從searchField.text字符串已經與空白結束,你就必須將其刪除。

這還不是一個完美的解決方案,例如,如果搜索字符串在句尾,則不會找到搜索字符串。相反,您可以做的不是添加空白字符,而是在點擊後查看字符並確保它不是字母。對於這一點,看看在類NSCharacterSet

NSCharacterSet * letters = [NSCharacterSet letterCharacterSet]; 
if (![letters characterIsMember:[textString characterAtIndex:(range.location+searchString.length)]]) { 
... 
}