libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

テキストを扱うNSString/NSMutableString (2/6)

作成:2011-02-11 17:48
更新:2011-02-11 18:04

■NSStringの基本操作

NSStringは、@"Hello"というような形のテキストリテラルの他、さまざまな形でインスタンスを作成し利用することができます。また作成したテキストを操作するための機能なども多数揃えられています。

ただし、勘違いしてはならないのですが、「NSStringは、テキストを直接操作することはできない」のです。例えば、テキストを変更するようなことはできません。できるのは、「テキストを変更したインスタンスを新たにつくる」ということだけです。NSStringインスタンスのテキストをそのまま書き換えたりすることはできないのです(変更できるテキストのためのクラスも別途用意されています)。

では、NSStringのテキストを操作するためのメソッドについて、基本的なものをいくつか紹介しておきましょう。

◯テキストの結合
NSString* 変数 = [《NSString*》stringByAppendingString:《NSString*》];
まずは「テキストをつなげる」メソッドです。これは、NSStringインスタンスの末尾に別のNSStringインスタンスのテキストをつなげた新しいNSStringインスタンスを生成して返すメソッドです。なにやらややこしそうですが、例えば、@"Hello,"@"Hanako"をつなげて、@"Hello,Hanako"というNSStringを作る、というようなときに使います。
NSString* str = @"Hello,";
str = [str stringByAppendingString:@"Hanako"];
NSLog(@"%@",str);
こんな具合ですね。これで、「Hello,Hanako」と書き出されます。これは、最初に作成した@"Hello"strが変更されているわけではありません。後に@"Hanako"を付け足した、新しいNSStringインスタンスが作られ、またstrに再設定されているのですね。

◯フォーマットを使った結合
NSString *変数 = [《NSString*》 stringByAppendingFormat:
        フォーマット, 変数, …… ];
フォーマットテキスト("%s"とかいうようにして、テキストの中に他の値を埋め込んだテキストを生成するのに使ったものですね)を使って新しいテキストを作ることもできます。これを利用すると、もっと柔軟にテキストをつなぎあわせることができるようになります。例えば、こんな具合です。
NSString* str = @"Hello";
NSString* format = @",Miss %@. How are you?";
str = [str stringByAppendingFormat:format,@"Hanako"];
NSLog(@"%@",str);
これを実行すると、「Hello,Miss Hanako. How are you?」というテキストが出力されます。@"Hello"の後に、 @",Miss %@. How are you?"というテキストを付け足しますが、この%@の部分には@"Hanako"というテキストが埋め込まれます。そして、新しいテキストのNSStringが作成されるのです。

◯テキストの比較
BOOL 変数 = [《NSString*》 isEqual: 《NSString*》];
BOOL 変数 = [《NSString*》 isEqualToString: 《NSString*》];
これは、2つのNSStringが同じテキストかどうかを比較するものです。2種類ありますが、これは「同じオブジェクトか」を比較するものと、「同じテキストか」を比較するものです。

返値は「BOOL」というものになります。このBOOLObjective-Cに用意されている真偽値を扱うタイプで、「YES」「NO」のいずれかの値になります。isEqual:は、スーパークラス(覚えてますか? 継承で、もとになるクラスでしたね)のNSObjectに用意されているメソッドで、オブジェクトどうしを比較するためのものです。そしてisEqualToString:は、NSStringに用意されているメソッドで、2つのテキストを比較します。テキストを比較するなら、こっちのisEqualToString:を使ったほうが良いでしょう。
NSString* str1 = @"Hello";
NSString* str2 = [@"Hell" stringByAppendingString:@"o"];
BOOL res = [str1 isEqualToString:str2];
NSLog(res ? @"YES!" : @"No..");
こんな具合ですね。実行してみると、両者は同じだと判断して「YES!」が出力されます。

◯テキストの長さ
NSUInteger 変数 = [《NSString*》 length];
テキストの長さ(文字数)を返すためのものです。返値は「NSUInteger」という値になっています。これは、Objective-Cで扱われる整数値で、まぁint値と同じようなものと考えていいでしょう(実際、簡単にキャストできます)。Objective-Cのオブジェクトで整数の値が使われるときには、たいていこのNSUIntegerか、「NSInteger」というもののどちらかが使われます(NSUIntegerunsignedつまり符号のない整数値で、NSIntegerは符号のある整数値です)。
int n = [@"Welcome to Objective-C." length];
NSLog(@"count: %i",n);
例えば、こんな具合に実行すると、文字数として「23」が出力されます。ここでは返値をそのままint型変数に収めていますね。NSUIntegerは、unsigned longまたはunsigned intを新たに定義しなおしたようなものなので、こんな具合にそのままintにキャストして収めることができます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※サンプル(1)
NSString* str = @"Hello,";
str = [str stringByAppendingString:@"Hanako"];
NSLog(@"%@",str);

※サンプル(2)
NSString* str = @"Hello";
NSString* format = @",Miss %@. How are you?";
str = [str stringByAppendingFormat:format,@"Hanako"];
NSLog(@"%@",str);

※サンプル(3)
NSString* str1 = @"Hello";
NSString* str2 = [@"Hell" stringByAppendingString:@"o"];
BOOL res = [str1 isEqualToString:str2];
NSLog(res ? @"YES!" : @"No..");

※サンプル(4)
int n = [@"Welcome to Objective-C." length];
NSLog(@"count: %i",n);

※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る