最終更新:2013-03-10 (日) 01:45:42 (4063d)  

NSString
Top / NSString

Cocoa(Objective-C)の文字列クラス

C言語との違い

"hoge"

Cリテラル

@"hoge"

Objective-Cリテラル

Objective-C/リテラル

NSString *someString = @"Hello, World!";

NSString *someString = [NSString stringWithCString:"Hello, World!" encoding:NSUTF8StringEncoding];

と同等。

  • which is assumed to be ‘\0’-terminated and UTF-8 encoded.
  • There has been support for Unicode in constant @"" NSStrings since Xcode 3.0?
    • それ以前は(NSStringの7bit ASCIIエンコーディング。GCCの制約。)

初期化

NSString* str;

str = @"hoge";//NSStringで初期化
str = [NSString stringWithString:@"日本語"];//NSStringで初期化
str = [NSString stringWithCString:"hoge"];//C文字列で初期化
str = [NSString stringWithCString:"日本語" encoding:NSShiftJISStringEncoding];//文字コードを指定(ソースのエンコードと合わせる)

str = [[NSString alloc]initWithCString:"Hello"];//allocしてからinit
str = [[[NSString alloc]initWithString:@"日本語"] autorelease];//allocしてからinit
str = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];

可変文字列

NSStringはImmutable(変更不可)なので可変な文字列を扱いたい時はNSMutableStringを使う

NSMutableString* str = [NSMutableString stringWithString:@"hoge"];//可変文字列
string = [str string];//NSStringからNSMutableStringを生成
string = [NSMutableString string];//空文字列を生成

各種操作

[str length];//文字列の長さ
strC = [strA stringByAppendingString:strB];//結合

//フォーマット出力
str = [NSString stringWithFormat:@"%a is hoge",stringA];//可変引数のときは,で区切る

[str appendString:@"hoge"];//追加
[str insertString:@"ins" atIndex:2];//挿入
[str deleteCharactersInRange:NSMakeRange(0,1)];//削除

BOOL ret;

ret = [strA isEqualToString:strB];//比較

ret = [str hasPrefix:@"Pre"];//前置詞
ret = [str hasSugfix:@"Suf"];//後置詞

NSRange range;
range = [str rangeOfString:@"hoge"];//hogeがstrに含まれているか
range.location

stringA = [str substringToIndex:5];//先頭から5文字
stringA = [str substringFromIndex:5];//5文字目以降
stringA = [str substringWithRange:NSMakeRange(6,5)];//範囲指定
 
  • ==はポインタの比較。文字列の比較はisEqualToString?

ファイル読み込み

NSString* text;
NSString* path = @"/Users/Destination";
NSError* error;

text = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];

ファイル書き込み

NSString* text = @"sample text";
NSString* path = @"/Users/Destination/text.txt";
NSError* error;

BOOL result;
//atomicallyは補助ファイルを使ってファイルの破損を防止するかどうか
result = [text writeToFile:path atomically:yes encoding:NSUTF8StringEncoding error:&error];

stringWithFormat

  • 引数はNSString
  • 置換子
%@ NSString
%d,%D,%i 整数
%u,%U 符号なしの整数
%x 符号なし整数を小文字の16進で表現
%X 符号なし整数を大文字の16進で表現
%f 小数
%c 文字
%s C言語の文字列
%% %
 [NSString stringWithFormat:@"%@ %g", [font fontName], [font pointSize]]

NSRange

typedef struct _NSRange{
  unsigned int location;
  unsigned int length;
}NSRange;

NSRange range = NSMakeRange(0,5);
i=range.location;

関連

  • NSStringEncoding
  • NSCFString?
  • NSPlaceholderString?
  • NSPlaceholderMutableString?
  • NSPathStore2?
  • NSSimpleCString?
  • NSConstantString?

参考