natsuの秘密基地です
カレンダー
03 | 2025/04 | 05 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
カテゴリー
プロフィール
HN:
natsu
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ある意味で、ある文章から特定の文字列を
抜き出さなければならないという仕事は、
いつだってある仕事なのだと思う。
従って、「ある意味で」という言葉を文書から検索し、
その位置を導きだすこというサンプルは、
ある意味、非常に有益だと思う。
管さんはある意味でを使い過ぎらしい。
ある意味で。
これまで、なんか重い話題が続いたので、
ある意味ちょっと息抜きで。
レッツrangeOfString:options。
第一引数で検索したい文字列を指定。
私の場合、@"ある意味で"。
第二引数はオプション。
実際はunsigned int。
オプションは適宜指定で。
まずは無しで検索してみたいの私は0で。
戻り値のNSRangeはlocationとlengthを持つ構造体。
NSLog(@"location : %d length : %d", range.location, range.length);
とかやれば値が見れる。
locationは先頭の文字を0として、
多バイト文字でも文字数で何文字目か出してくれる。
lengthも文字数。
私の場合、「ある意味で」が2回登場するので、
もう一回やる必要がある。
ふつう2回出る、なんて知らないので、
do whileで回す必要がある。
そんなとき、rangeOfString:options:range:。
第三引数で、残りの部分を指定してやればいい。
range= NSMakeRange(0, 0);
result = NSMakeRange(0, 0);
do
{
range.location = result.location+result.length;
range.length = [base length] - (result.location+result.length);
result = [base rangeOfString:@"ある意味で" options:0 range:range];
if(result.location != NSNotFound)
NSLog(@"location : %d length : %d", result.location, result.length);
}while(result.location != NSNotFound);
オプションについてはunsigned intなんで、
cのノリで
NSCaseInsensitiveSearch | NSLiteralSearch
とかしちゃえばOK。
例えばこんなオプションがありんす。
NSCaseInsensitiveSearch
大文字小文字を区別しない。
NSLiteralSearch
これを指定した場合、byteをみて比較する。
例えば、UCS2で3071,306F,309Aとした場合、
それは"ぱぱ"となる。
3071が"ぱ"。
306Fが"は"。
309Aが"゜"
"ぱは゜"ではなく、だいたいちゃんと"ぱぱ"と表示される。
このオプションを指定すると、
3071の"ぱ"で検索した場合、
306F,309Aの"ぱ"で引っかからなくなる。
NSBackwardsSearch
終わりから検索。
エディタの"前を検索"を実装するときに使うんだろうなと。
NSAnchoredSearch
先頭しか検知しない。
(NSBackwardsSearchのときは最後)
NSNumericSearch
文字列に含まれる数値で比較。
たぶん、compare:optionsとか使うときに使う。
NSDiacriticInsensitiveSearch
発音区別符号無視。
無視すると、'ö’は‘o'で検索に引っかかる。
試してないけど。
NSWidthInsensitiveSearch
全角aが半角aとマッチするようになる。
半角aもまた全角aとマッチするようになる。
NSForcedOrderingSearch
compare:optionsとかで使えるんだと思う。
こいつは言ってることがよくわかんなかった。
NSCaseInsensitiveSearch指定で"aaa"<"AAA"らしい。
NSCaseInsensitiveSearchとNSLiteralSearchが大事なんだと思う。
PR
この記事にコメントする