FROM : Citizen
DATE : Tue Jan 29 20:05:03 2008
On 29 Jan 2008, at 18:12, John Stiles wrote:
> I'm trying to find a substring in an NSString. But I want to find
> whole words (e.g. like in the Find panel when you choose "Full word"
> from the popup, rather than "Contains" or "Starts With").
>
> Unless I'm missing something, it looks like NSString's -
> rangeOfString:options:range:locale: doesn't have an option for
> finding whole words.
>
> How does the Find panel do it, then? Am I going to have to "roll my
> own" code for string searching? That sounds error-prone to me; I'd
> much rather have the OS do it.
You could get close with generating the characters you expect to find
at the word boundaries with:
NSCharacterSet * wordBoundriesCharacterSet = [[NSCharacterSet
letterCharacterSet] invertedSet];
You would need to change this accordingly if you did not want numbers
to be considered as a word boundary. You could of course create a
boundary character set with just whitespace and punctuation marks - it
just depends on how you would like the final feature to work.
You could then use this character set with an NScanner to search for
"Full words".
If you have not used an NSScanner before, it is covered in a chapter
of the Strings Programming Guide for Cocoa: <http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/introStrings.html
>
Of course someone may have a better approach.
Cheers,
Dave
------
David Kennedy (http://www.zenopolis.com)
DATE : Tue Jan 29 20:05:03 2008
On 29 Jan 2008, at 18:12, John Stiles wrote:
> I'm trying to find a substring in an NSString. But I want to find
> whole words (e.g. like in the Find panel when you choose "Full word"
> from the popup, rather than "Contains" or "Starts With").
>
> Unless I'm missing something, it looks like NSString's -
> rangeOfString:options:range:locale: doesn't have an option for
> finding whole words.
>
> How does the Find panel do it, then? Am I going to have to "roll my
> own" code for string searching? That sounds error-prone to me; I'd
> much rather have the OS do it.
You could get close with generating the characters you expect to find
at the word boundaries with:
NSCharacterSet * wordBoundriesCharacterSet = [[NSCharacterSet
letterCharacterSet] invertedSet];
You would need to change this accordingly if you did not want numbers
to be considered as a word boundary. You could of course create a
boundary character set with just whitespace and punctuation marks - it
just depends on how you would like the final feature to work.
You could then use this character set with an NScanner to search for
"Full words".
If you have not used an NSScanner before, it is covered in a chapter
of the Strings Programming Guide for Cocoa: <http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/introStrings.html
>
Of course someone may have a better approach.
Cheers,
Dave
------
David Kennedy (http://www.zenopolis.com)






Cocoa mail archive

