任意の文字が現れる場所を確認する : Objective-C プログラミング

PROGRAM


任意の文字が現れる場所を確認する

Objective-C では NSString 型の文字列から、任意の文字が現れる場所を調べることができるようになっています。

// string という名前の NSString 型の文字列から、"," が最初に現れる場所を取得します。

NSRange found = [string rangeOfString:@","];

このようにすることで、指定した文字が見つかった位置と文字の長さが NSRange 型で取得できます。

NSRange の location には、最初の 1 文字目を 0 とした番号で文字位置が取得されます。length には "rangeOfString:" で指定した文字の文字数が入ります。

指定した文字が見つからなかった場合には NSRange の location の値に NSNotFound が設定されます。また、length には 0 が設定されるようでした。

 

これを利用して、例えば文字列を ":" で分割するには、次のような感じになります。

// 文字列の、コロンが現れる位置を特定します。

// 日本語の検索の場合は NSLiteralSearch を付けると濁点を含む文字の検索(合成文字とそうでない文字の関係?)で不都合が生じることがあるようです。

NSRange found = [string rangeOfString:@":" options:NSLiteralSearch];

 

if (found.location != NSNotFound)

{

// コロンが見つかったので、その場所の前後で文字列を分割します。

string_left = [string substringToIndex:found.location];

string_right = [string substringFromIndex:found.location + found.length];

}

文字列を分割するという操作は "componentsSeparatedByString:" を使っても行うことはできますけど、このようにすることで、最初に現れた場所と残りとを簡単に分割することも可能です。

 

なお、この "rangeOfString:" メソッドでは、検索対象とする文字列の範囲を指定することもできます。

範囲の指定方法は、NSRange の値として、location には 1 文字目を 0 とした文字位置を、length にはその文字位置からの文字数を指定します。

// 範囲を限定して文字の検索を行います。

NSRange found;

NSRange search;

 

// 6 文字目からの 10 文字分を検索範囲とします。

search.location = 5;

search.length = 10;

 

found = [string rangeOfString:@":" options:0 range:search];

検索結果は、範囲を指定しなかったときと同じです。

範囲を指定しても、検索元の文字列全体の最初の文字を 0 番目と見た何番目に見つかったかどうかが location の値として取得されます。

[ もどる ]