NSStringとは
NSStringは文字列を格納するオブジェクトです。iPhone内部やインターネット上のファイルの場所を格納するのにも使われ、 その場合に便利なさまざまメソッドが用意されています。C言語などでは文字列は単に""の間に入れるだけですが、 Objective-Cの場合は@""と、頭の部分に@が付きます。
代表的なメソッド(目的別)
文字列からNSStringオブジェクトを作りたい - initWithString:
変数を組み込んだ文字列からNSStringオブジェクトを作りたい - initWithFormat:
NSStringオブジェクトの内容をファイルに保存したい - writeToFile:atomically:encoding:error:
インターネット上のファイルからNSStringオブジェクトを作りたい - initWithContentsOfURL:encoding:error:
ファイルの内容からNSStringオブジェクトを作りたい - initWithContentsOfFile:encoding:error:
NSStringオブジェクト同士を結合して新しいNSStringオブジェクトを作りたい - stringByAppendingString:
NSStringオブジェクトに変数などを含む文字列を追加したい - stringByAppendingFormat:
NSStringオブジェクトの長さを知りたい - length
別のNSStringオブジェクトと内容が同じか知りたい -isEqualToString:
NSStringオブジェクトをint型の整数に変換したい - intValue
NSStringオブジェクトをfloat型の変数に変換したい - floatValue
NSStringオブジェクトをdouble型の変数に変換したい - doubleValue
NSStringオブジェクトを特定の区切り文字で分割したい - componentsSeparatedByString:
ファイルパスからファイル名だけ取り出したい - lastPathComponent
ファイルパスからファイルの拡張子だけ取り出したい - pathExtension
ファイルパスの末尾にファイル名を追加したい - stringByAppendingPathComponent:
ファイルパスの末尾にファイルの拡張子を追加したい - stringByAppendingPathExtension:
文字列からNSStringオブジェクトを作りたい - initWithString:
- (id)initWithString:(NSString *)aString
別のNSStringオブジェクトからNSStringオブジェクトを作ります。
NSString *str = [[NSString alloc] initWithString:@"string"];
変数を組み込んだ文字列からNSStringオブジェクトを作りたい - initWithFormat:
- (id)initWithFormat:(NSString *)format ...
文字列の中に変数の内容を含めたい時に使います。C言語のコンソール出力などでおなじみの%dなどを使って変数をNSStringオブジェクトに取り込みます。 NSObjectが元になっているオブジェクトのポインタの中身は%@を使って表します。NSStringは文字列だからと間違って%sを使わないように気をつけましょう。
int i=100;
NSString *str = [[NSString alloc] initWithFormat:@"%d%です。",i];
NSStringオブジェクトの内容をファイルに保存したい - writeToFile:atomically:encoding:error:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error
現在のNSStringオブジェクトの内容をファイルに保存します。
NSString *str = @"abc";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"text.txt"];
[str writeToFile:dataPath atomically:YES encodidng:NSUTF8StringEncoding error:nil];
インターネット上のファイルからNSStringオブジェクトを作りたい - initWithContentsOfURL:encoding:error:
- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error
インターネット上のファイルを使ってNSStringオブジェクトを作ります。
NSURL *url = [NSURL URLWithString:@"http://konton.ninpou.jp/software/Tiny3D/Samples/dxf/title2.dxf"];
NSString *str = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
ファイルの内容からNSStringオブジェクトを作りたい - initWithContentsOfFile:encoding:error:
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
ファイルの内容からNSStringオブジェクトを作ります。
NSString *str;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"text.txt"];
str = [[NSString alloc] initWithContentsOfFile:dataPath encoding:NSUTF8StringEncoding error:nil];
NSStringオブジェクト同士を結合して新しいNSStringオブジェクトを作りたい - stringByAppendingString:
- (NSString *)stringByAppendingString:(NSString *)aString
2つのNSStringオブジェクトを結合した新しいNSStringオブジェクトを作ります。下の例では、@"abcとdef"がログ出力されます。
NSString *str1 = @"abc";
NSString *str2 = @"とdef";
NSString *aString = [str1 stringByAppendingString:str2];
NSLog(@"aString:%@",aString);
NSStringオブジェクトに変数などを含む文字列を追加したい - stringByAppendingFormat:
- (NSString *)stringByAppendingFormat:(NSString *)format ...
元となるNSStringオブジェクトに文字列を追加するのはstringByAppendingString:で行いますが、こちらは変数の値などを追加する場合に用います。 下の例ではaStringに@"iは現在256です。"が入ります。NSObjectが元になっているオブジェクトのポインタの中身は%@を使って表します。 NSStringは文字列だからと間違って%sを使わないように気をつけましょう。
int i = 256;
NSString *str1 = @"iは現在";
NSString *aString = [str1 stringByAppendingFromat:@"%dです。",i];
NSLog(@"aString:%@",aString);
NSStringオブジェクトの長さを知りたい - length
- (NSUInteger)length
NSStringオブジェクトに現在格納されている文字列の長さが返ります。
NSString *str = @"abc";
NSUInteger length = [abc length];
NSLog(@"strの長さは%dです。",length);
別のNSStringオブジェクトと内容が同じか知りたい -isEqualToString:
- (BOOL)isEqualToString:(NSString *)aString
NSStringオブジェクト内部の文字列を比較します。同じならYES、違うならNOを返します。NSString内のオブジェクトは単純な==では内容が同一であるかを調べられないので、 これを使って比較を行います。==での比較をしたとしてもアドレスが違えば内容が同じでも偽になるので比較の意味がありません。下の例ではequalaにはYES、 equalbにはNOが返ります。なお空の文字列かどうかを知りたい場合は@""と比較します。
NSString *stra = @"abc";
NSString *strb = @"xyz";
BOOL equala = [stra isEqualToString:@"abc"];
BOOL equalb = [strb isEqualToString:@"abc"];
NSStringオブジェクトをint型の整数に変換したい - intValue
- (int)intValue
NSStringオブジェクト内の文字列をint型の整数にします。
NSString *str = @"123456";
int i = [str intValue];
NSStringオブジェクトをfloat型の変数に変換したい - floatValue
- (float)floatValue
NSStringオブジェクト内の文字列をint型の整数にします。
NSString *str = @"1.1";
float f = [str floatValue];
NSStringオブジェクトをdouble型の変数に変換したい - doubleValue
- (double)doubleValue
NSStringオブジェクト内の文字列をint型の整数にします。
NSString *str = @"1.23456789";
double d = [str doubleValue];
NSStringオブジェクトを特定の区切り文字で分割したい - componentsSeparatedByString:
- (NSArray *)componentsSeparatedByString:(NSString *)separator
NSStringオブジェクト内にある文字列を、指定した文字列を区切り文字として分割します。分割されたそれぞれの文字列はNSArrayに格納されます。 下の例ではNSArrayには順番に@"abc"、@"def"、@"ghi"が格納されます。区切りの文字列は1文字に限らず指定できます。文字列の始めが区切りの文字列の場合には、 NSArrayの始めのオブジェクトは空になります。
NSString *str = @"abc,def,ghi";
NSArray *array = [str componentsSeparatedByString:@","];
NSLog(@"array:%@, [array description];
ファイルパスからファイル名だけ取り出したい - lastPathComponent
- (NSString *)lastPathComponent
ファイルパスの文字列が格納されているNSStringオブジェクトから、ファイルパスの最後の要素を取り出します。最後の要素がディレクトリの名前である場合は、 そのディレクトリの名前が返ります。下の例ではdocumentsDirectoryNameには自分のアプリケーションのドキュメントフォルダ@"Documents"の名前が、 fileNameには@"text.txt"が格納されます。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"text.txt"];
NSString *documentsDirectoryName = [documentDirectory lastPathComponent];
NSString *fileName = [dataPath lastPathComponent];
ファイルパスからファイルの拡張子だけ取り出したい - pathExtension
- (NSString *)pathExtension
ファイルパスの末尾にある拡張子の部分だけを取り出します。拡張子がない場合は@""(空白のNSStringオブジェクト)が返ります。 下の例では@"txt"が返ります。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"text.txt"];
NSString *ext = [dataPath pathExtention];
ファイルパスの末尾にファイル名を追加したい - stringByAppendingPathComponent:
- (NSString *)stringByAppendingPathComponent:(NSString *)aString
ファイルパスの末尾にファイル名やディレクトリ名を追加します。これだけならstringByAppendingString:を使っても良いのではと思う方もいると思いますが、 こちらは元の文字列の末尾が"/"で終わっていない場合に、自動的に@"/"を挿入してくれます。末尾に@"/"が入っていたかどうかをプログラマ自身が気にしなくても良く、 場合分けをしなくて良いのは利点でしょう。例はここで見る前に別の場所で似たようなものを嫌というほど目にしているかもしれませんね。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"text.txt"];
ファイルパスの末尾にファイルの拡張子を追加したい - stringByAppendingPathExtension:
- (NSString *)stringByAppendingPathExtension:(NSString *)ext
ファイルの拡張子をファイルパスの末尾に追加します。ファイル名の中に@"."は1個だけとは限りませんから、もともと末尾に@"."が入っていても、 そこにさらに@"."+拡張子を追加します。下の例ではnameというNSStringオブジェクトに拡張子があるかを調べて、無い場合に拡張子を追加しています。 fileNameはこのメソッドがあるオブジェクトのメンバで@propertyにはcopyが指定されているものとします。
if([[name pathExtension] isEqualToString:@""]) {
self.fileName = [name stringByAppendingPathExtension:@"txt"];
} else {
self.fileName = name;
}