Swift

Swift:これまた目から鱗。文字列検索。

文字列の検索には、こんな方法があったのですね。

(変更 5/30/2015) 文字列検索は、次のメソッドの方が取り組みやすいです。

pDataの中にpTargetという文字列が入っているかどうか調べてその文字位置を返す。マイナスのときはNot found.
func CallSearchWords(pData:String, pTarget:String)-> Int {

if count(pData) <= 0 || count(pTarget) <= 0 || count(pData) < count(pTarget) { return -1 } // == not found ==
else { }
var wRange  = NSRange(location: 0, length: 0)
wRange  = NSString(string: pData).rangeOfString(pTarget)
if wRange.length > 0 { return wRange.location } // == start index ==
else { return -2 }    // == not found ==
}

wStrigSourceという文字列にwTargetが入っているかどうか調べる方法です。参考まで。

例:var wRange0:Range = wStrigSource.rangeOfString(wTarget)!

var wStrigSource:String = “abc?efe”
var wTarget:String      = “?”
var wRange0:Range   = wStrigSource.rangeOfString(wTarget)!

ただし、実際には、次のように書く必要があります。検索文字列がないときnilが返ってくるようなので、これを無視して検索してあるか・ないかチェックしてしまうと、実行時にエラーになります。

var wStrigSource:String = “abc?efe”
var wTarget:String      = “?”
if wStrigSource.rangeOfString(wTarget)! == nil {
見つからないときの処理
} else {
var wRange0:Range   = wStrigSource.rangeOfString(wTarget)!
見つかったときの処理
}

もうひとつ重要なことは、ヒットした文字位置が返ってくるのですが、Intに直すには、特に注意が必要です。そのほか、startIndex+1と加算する場合も、注意が必要です。

Intに直す方法
var wStartindex:Int = distance(wStrigSource.startIndex, wRange1.startIndex)”)

.startIndex+1
var wIdex = advance(wRange0.startIndex, 1)

Categories: Swift, 技術