[iOS,Objective-C] NSStringで特定文字の位置を取得する方法
JavaScriptにおける indexOf() や PHPによる strpos(), mb_strpos() のような、特定のテキストの出現位置を他のテキストから取得する方法をご紹介します。
NSSting::rangeOfString
rangeOfStringメソッドに引数としてNSString型のテキストを渡すと、返り値にそのテキストの出現位置(location)と、長さ(length)が設定されたNSRangeデータを返します。
もし見つからなければlocationにNSNotFound、lengthに0が設定されるので、この値を見ることで位置を特定することができます。
NSNotFound は取得してみると中身は特定の数値データなのですが、この数値はしばしば変更されるので、数値だけで有無を判断しないようにしてください。
rangeOfStringの使用例
NSString* searchStr = @"good"; NSString* targetStr = @"good morning"; NSRange range = [targetStr rangeOfString:searchStr]; if (range.location == NSNotFound) { NSLog(@"見つかりませんでした。"); } else { NSLog(@"出現位置:%d 長さ:%d", range.location, range.length); }
NSLogの出力結果は以下のようになります。
出現位置:0 長さ:4
くれぐれも出現位置(location)のあるなしを0と比較してしまわないようにしましょうね。
手品屋 ベンディックスボムシェル・マジック用財布<簡単に変化や消失出現など出来るマジック☆上口龍生の手順解説付き>
¥9,350 (2025-04-17 15:05 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)ヒンバー・ワレットの発展形ワレットでカードのすり替えやカード・トゥ・ワレットの現象を繰り返して見せることが出来るます。デイブ・ベンディックスの考案。 長らくどこにもみかけなかったこのワレット。あってもかなりごつかったり海外でしか売っていなかったりと希少。少々複雑な機構なので作る素材や技術が難しいようで。 そこで手品屋では、たくさん試行錯誤し、ようやく高品質でリーズナブルなベンディックスボムシェルを製作することができました^^ 上口龍生さんの演技と解説付きです。(←カードの基本技法が必要です。) ... もっと読む
GUM(ガム)プラス【医薬部外品】 デンタルリンス 薬用 液体ハミガキ [スッキリ爽やかタイプ(アルコール配合) ハーブミント] 900ml×2本+おまけ付き
¥1,980 (¥1 / グラム) (2025-04-17 15:05 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)【先制殺菌処方のGUMプラス】歯周病菌が増殖する原因に着目。歯周病菌を殺菌するだけでなく、菌の増殖まで抑えるプラスのアプローチ。 歯周病(歯肉炎・歯周炎)予防、口臭防止、口中浄化、口中爽快、ムシ歯(虫歯)の発生及び進行の予防 原産国:日本 内容量:900ml×2本 ●内服液ではありません●発疹、かゆみ等が現れた場合は使用を中止し、医師に相談する●乳幼児の手の届かない所に保管する
近代日本の郊外住宅地
¥9,240 (2025-04-17 15:05 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)2011-12-21