NSString
変更しない文字列クラス
解説
作成後に変更不可な文字列を表すクラスです。変更可能な文字列はNSMutableStringクラスを使います。
継承 | NSObject |
準拠 | NSCopying |
NSMutableCopying | |
NSSecureCoding | |
NSObject (NSObject) | |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | OS X 10.0 以降 |
iOS 2.0 以降 | |
定義 | NSPathUtilities.h |
NSString.h | |
NSURL.h |
概要
一旦作成すると変更できない文字列オブジェクトです。
作成後に変更可能にしたい場合はNSMutableStringクラスを使います。
書体や色など属性付文字列はNSAttributedStringやNSMutableAttributedStringを使います。
ラベルなど表示するために使う文字列はローカライズして扱う必要があります。コード内に直接日本語を書かないようにしましょう。(NSLocalizedString()を使用)
C言語のフレームワークである、Core FoundationのCFStringRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。
ARC環境では、管理対象のオブジェクトキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。
NSString *encodedString = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)@"target strings", NULL, (CFStringRef)@";,/?:@&=+$#", kCFStringEncodingUTF8); CFStringRef cfString = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%@ = %.2f \n"),CFSTR("pi"),3.1415); NSString *aString = (__bridge_transfer NSString *)cfString;
生成
文字列から作成する方法(-initWithString)、フォーマット文字列から作成する方法(-initWithFormat)が一般的です。この方法では文字列定数(@"")を使うことが出来ます。
フォーマット文字列から作成する方法ではcのprintf()で使えるものの他、%@が使えます。
ファイルから作成する方法としては、指定したURLのファイルから作成する方法(+stringWithContentsOfURL:encoding:error)があります。
ファイルパスで作成するメソッドも存在しますが、URLで指定する方法が推奨されていますのでURLで作成するようにしましょう。
C文字列(-stringWithCString:encoding)やUTF8から作成する(-stringWithUTF8String)方法もあります。
ファイルへの保存
URLへ保存する(writeToURL:atomically:encoding:error:)方法、ファイパスで保存する方法があります。
文字列の利用
文字列の長さ
文字列の長さは(-length)で取り出せます。
結合
末尾に文字列を付け加えて返す(-stringByAppendingFormat)方法やフォーマット文字列を付け加えて返す(-stringByAppendingString)方法などがあります。
NSStringは変更できないので、返されるオブジェクトは別のオブジェクトが作成されて返されます。
分離
指定した範囲の文字列を取り出す(-substringWithRange)や先頭から指定した位置の文字列を取り出す(-substringToIndex)や指定した位置から末尾までの文字列を取り出す(-substringFromIndex)があります。
ファイルパスを分割したい時など、区切り文字がわかっている場合には指定文字を分割記号として文字列を分割して配列で返す(-componentsSeparatedByString)方法があります。区切り文字が複数の場合はキャラクタセットを区切り文字として分割する(-componentsSeparatedByCharactersInSet)方法もあります。
検索・置換
指定した範囲を別の文字で置き換えた新しい文字列を返す(-stringByReplacingCharactersInRange:withString)方法があります。
iOS4.0からはBlocksが使えるので、文字列オブジェクトの中を検索して、マッチする行や部分文字列を返す(-enumerateLinesUsingBlock)方法が使えます。
-(void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block
引数
( void (^)(NSString *line, BOOL *stop) )block
検索に使用するブロック
line 検索文字列
stop 検索を中止
Objective-C
- (void)displayText062:(NSString *)text { NSLog(@"text 062 %@",text); } -(void)method062 { __block BOOL found = NO; //find word NSString *multiLine = [NSString stringWithString:@"apple\nbanana\norange\n" ]; NSString *string = [NSString stringWithString:@"apple" ]; [multiLine enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) { if ([line localizedCaseInsensitiveCompare:string] == NSOrderedSame) { *stop = YES; found = YES; NSLog(@"myBlock class= %@",[line className]); [self performSelectorOnMainThread:@selector(displayText062:) withObject:string waitUntilDone:NO]; }else{ *stop = YES; found = NO; [self performSelectorOnMainThread:@selector(displayText062:) withObject:@"NO!" waitUntilDone:NO]; } }]; }
比較
大文字・小文字の区別をせず文字列が同じかどうかを比較する(-caseInsensitiveCompare)方法、ローカライズ文字列で比較する(-localizedCompare)方法などがあります。
数値への変換
文字列を数値に変換する方法が用意されています。
変換したあとのタイプのために幾つかの種類があります。整数値(NSInteger)にするには(-integerValue)を、浮動小数点値(float)にするには(-floatValue)を使います。
大文字、小文字の変換
単語の最初の文字を大文字にする(-capitalizedString)方法、全て小文字にする(-lowercaseString)方法、全て大文字にする(-uppercaseString)方法などがあります。
エンコード変換
指定したエンコーディングを使ってURLエンコーディング文字列を返す(-stringByAddingPercentEscapesUsingEncoding)方法が用意されているのですが、一部上手く機能しない文字があり、CFURLCreateStringByAddingPercentEscapes()が使われる場合が多いようです。
作成
クラス
使用可能
OS X 10.0
iSO 2.0
参照
文字列の作成と初期化
空の文字列を作って返します
+ string
文字列を初期化して返します
– init
指定したバイト列と長さとエンコーディングでNSStringを作って返します
– initWithBytes:length:encoding
バイト列からエンコーディングを指定してNSStringを返します
– initWithBytesNoCopy:length:encoding:freeWhenDone
指定したC文字列と範囲で文字列オブジェクトを初期化して返します
– initWithCharacters:length
NSStringを初期化して返します
– initWithCharactersNoCopy:length:freeWhenDone
文字列からを初期化して返します
– initWithString
C文字列から指定したエンコーディングで初期化して返します
– initWithCString:encoding
UTF8からNSStringを初期化して返します
– initWithUTF8String
formatで指定した書式で初期化して返します
– initWithFormat
formatで指定した書式と引数リストで初期化して返します
– initWithFormat:arguments
formatで指定した書式と場所で文字列を作成、初期化します
– initWithFormat:locale
formatで指定した書式と場所で文字列を作成、初期化します
– initWithFormat:locale:arguments
データを指定したエンコーディングで変換して文字列を初期化して返します
– initWithData:encoding
書式を指定して文字列を作って返します
+ stringWithFormat
書式を指定してローカライズされた文字列を作って返します
+ localizedStringWithFormat
指定したC文字列から指定した長さの文字列を作って返します
+ stringWithCharacters:length
文字列からコピーして新しく文字列を作って返します
+ stringWithString
C文字列から指定したエンコーディングで文字列を作ります
+ stringWithCString:encoding
UTF8文字からNSStringを作って返します
+ stringWithUTF8String
C文字列からNSStringのインスタンスを作って返します
+ stringWithCString OS X 10.4,iOS2.0で廃止
→ +stringWithCString:encodingを使用。
C文字列の先頭から指定した文字数分までのNSStringを作って返します
+ stringWithCString:length OS X 10.4,iOS2.0で廃止
C文字列からNSStringを初期化して返します
– initWithCString: 10.4で廃止
C文字列の指定した長さでNSStringを初期化して返します
– initWithCString:length OS X 10.4,iOS2.0で廃止
C文字列からNSStringを初期化して返します
– initWithCStringNoCopy:length:freeWhenDone OS X 10.4,iOS2.0で廃止
ファイルから文字列を作成、初期化
ファイルから読み込んだデータでNSStringを作って初期化して返します
+ stringWithContentsOfFile:encoding:error
指定したファイルの内容から指定したエンコーディングで読み込んだ文字列を、初期化して返します。
– initWithContentsOfFile:encoding:error
指定したファイルの内容から指定したエンコーディングで文字列を返します
+ stringWithContentsOfFile:usedEncoding:error
指定したファイルの内容を指定したエンコーディングで初期化して返します
– initWithContentsOfFile:usedEncoding:error
ファイルから読み込んだデータでNSStringを作って初期化して返します
+ stringWithContentsOfFile 10.4で廃止
→stringWithContentsOfFile:usedEncoding:errorを使用
ファイルの内容からNSStringを初期化して返します
– initWithContentsOfFile 10.4で廃止
→initWithContentsOfFile:usedEncoding:errorを使用
URLから文字列を作成、初期化
指定したファイルの内容から指定したエンコーディングで文字列を返します
+ stringWithContentsOfURL:encoding:error
指定したファイルの内容を指定したエンコーディングで初期化して返します
– initWithContentsOfURL:encoding:error
指定したファイルの内容から指定したエンコーディングで文字列を返します
+ stringWithContentsOfURL:usedEncoding:error
ファイルから指定したエンコーディングを使って文字列オブジェクトを作成します
– initWithContentsOfURL:usedEncoding:error
URLで読み込んでNSStringを作って返します
+ stringWithContentsOfURL 10.4で廃止
→-stringWithContentsOfURL:encoding:error: または
→-stringWithContentsOfURL:usedEncoding:error を使用
URLの内容からNSStringを初期化して返します
– initWithContentsOfURL 10.4で廃止
→-initWithContentsOfURL:encoding:error または →-initWithContentsOfURL:usedEncoding:error を使用
ファイルやURLへ書き込む
指定したエンコーディングでファイルに書き出します
– writeToFile:atomically:encoding:error
指定したエンコーディングでURLに書き込みます
– writeToURL:atomically:encoding:error
ファイルに書き込みます
– writeToFile:atomically 10.4で廃止
URLに書き込みます
– writeToURL:atomically 10.4で廃止
文字列の長さを得る
ユニコード文字列の長さを返します
– length
指定したエンコーディングでの長さを返します
– lengthOfBytesUsingEncoding
指定したエンコーディングでのバイト列の最大の長さを返します
– maximumLengthOfBytesUsingEncoding
文字とバイトを得る
文字列で番号(index)で指定した文字を返します(ユニコード文字列)
– characterAtIndex
bufferが示すメモリ領域にaRangeで示されたユニコード文字列を書き込みます。
bufferが示すメモリ領域にaRangeで示されたユニコード文字列を書き込みます
– getBytes:maxLength:usedLength:encoding:options:range:remainingRange
bufferが示すメモリ領域にユニコード文字列を書き込みます
– getCharacters: 10.6で廃止
C文字列を得る
指定したエンコーディングのC文字列を返します
– cStringUsingEncoding
指定したエンコーディングのC文字列をバッファに返します
– getCString:maxLength:encoding
ヌルで終わるUTF8表示を返します
– UTF8String
C文字列に変換して、そのポインタを返します
– cString 10.4で非推奨
C文字列で表現した場合の長さを返します
– cStringLength 10.4で廃止
文字列オブジェクトからC文字列を返します
– getCString 10.4で廃止
バッファに指定した長さのC文字列を返します
– getCString:maxLength 10.4で非推奨
バッファに指定した長さのC文字列を返します
– getCString:maxLength:range:remainingRange 10.4で非推奨
損失があるかもしれないC文字列を返します
– lossyCString 10.4で非推奨
文字列の複合化
文字列にフォーマットされた文字列を追加します
– stringByAppendingFormat
レシーバにaStringを追加した文字列を返します
– stringByAppendingString
文字列を指定した範囲で切り取り、代わりの文字列で埋めます
– stringByPaddingToLength:withString:startingAtIndex
文字の分割
文字列をセパレータで分けて、配列にして返します
– componentsSeparatedByString
引数で指定したキャラクタセットの文字で区切られる配列を返します。
– componentsSeparatedByCharactersInSet
文字列の両端から指定した文字セットに含まれる文字列を取り除きます
– stringByTrimmingCharactersInSet
指定した位置から末尾までの文字列を返します
– substringFromIndex
指定した範囲の文字列を返します
– substringWithRange
文字列の先頭から指定した位置までの文字列を返します
文字やsubstringsを検索
文字列オブジェクトから文字セットに含まれる文字の範囲を返します
– rangeOfCharacterFromSet
文字列からオプション付きで文字セットに含まれる文字の範囲を返します
– rangeOfCharacterFromSet:options
指定した範囲の文字列からオプション付きで含まれる文字の範囲を返します
– rangeOfCharacterFromSet:options:range
文字列を比較して部分一致した範囲の文字列を返します
– rangeOfString
文字列をオプション付きで比較して部分一致したレシーバの範囲の文字列を返します
– rangeOfString:options
文字列をオプション付きで比較して部分一致するレシーバの範囲を返します
– rangeOfString:options:range
文字列をオプション、範囲、ロケールで比較して部分一致するレシーバの範囲を返します
– rangeOfString:options:range:locale
指定した文字列とマッチする行があるかを検索します
– enumerateLinesUsingBlock
指定した範囲で文字列とマッチする行があるかを調べます。
– enumerateSubstringsInRange:options:usingBlock
部分文字列の置き換え
レシーバの指定した文字列を別の文字列で置き換えた新しい文字列を返します
– stringByReplacingOccurrencesOfString:withString
レシーバに含まれる文字列(target)を別の文字列(replacement)で置き換えた新しい文字列オブジェクトを返します
– stringByReplacingOccurrencesOfString:withString:options:range
レシーバの指定した範囲を文字列(replacement)で置き換えた新しい文字列を返します
– stringByReplacingCharactersInRange:withString
行、段落範囲の調査
指定した範囲の行の開始・終了・終了位置から改行文字を除いた位置を参照で返します
– getLineStart:end:contentsEnd:forRange
指定した範囲を含む行全体を返します
– lineRangeForRange
段落をセットします
– getParagraphStart:end:contentsEnd:forRange
指定した範囲が含まれる段落の範囲を返します
– paragraphRangeForRange
文字列の配置
指定した番号の文字の連続した文字の固まりの範囲を返します
– rangeOfComposedCharacterSequenceAtIndex
指定した範囲の文字の連続した文字の固まりの範囲を返します
– rangeOfComposedCharacterSequencesForRange
文字をプロパティリストに変換
文字列をプロパティリストと見なして、プロパティリストを作成して返します
– propertyList
文字列をキーと値で初期化した辞書として返します
– propertyListFromStringsFileFormat
文字列の比較
大文字、小文字の区別をせず文字列の比較をして結果を返します
– caseInsensitiveCompare
レシーバーとstringの間で大文字小文字を区別せずローカライズされた文字を比較します
– localizedCaseInsensitiveCompare
文字列を比較して結果を返します
– compare
レシーバーとstringの間でローカライズされた文字を比較します
– localizedCompare
オプション付きで文字列を比較して結果を返します
– compare:options
オプション付きで範囲を指定して文字列を比較して結果を返します。
– compare:options:range
オプション付きで範囲とロケールを指定して文字列を比較して結果を返します
– compare:options:range:locale
調査中
– localizedStandardCompare
文字列がレシーバの先頭部分と一致するか返します
– hasPrefix
文字列がレシーバの末尾部分と一致するか返します
– hasSuffix
文字列が一致しているかを返します
– isEqualToString
ハッシュテーブル・アドレスとして使える符号なし整数を返します
– hash
文字列の保持
指定した文字列を範囲とオプション付きで検索して範囲を返します
– stringByFoldingWithOptions:locale
共有する接頭語を得る
先頭から比較して、レシーバとaStringに共通の文字列を返します
– commonPrefixWithString:options
大文字小文字の変換
単語の最初の文字を大文字にして返します
– capitalizedString
小文字にして返します
– lowercaseString
各文字を大文字にして返します
– uppercaseString
マッピングと文字列の取得
– decomposedStringWithCanonicalMapping
文字列の内容を標準化します
– decomposedStringWithCompatibilityMapping
文字列を標準化して返します
– precomposedStringWithCanonicalMapping
文字列を標準化して返します
– precomposedStringWithCompatibilityMapping
数値を取得する
double数値を返します
– doubleValue
浮動小数点値を返します
– floatValue
整数値を返します
– intValue
整数値を返します
– integerValue
倍々精度値を返します
– longLongValue
ブール値を返します
– boolValue
エンコーディング
アプリケーションの環境の文字列エンコーディングを返します
+ availableStringEncodings
デフォルトC文字列エンコーディングを返します
+ defaultCStringEncoding
現在の言語のエンコーディングの名前を返す
+ localizedNameOfStringEncoding
エンコードを変換できるか返します
– canBeConvertedToEncoding
レシーバーの文字列をencodingで指定した方法でエンコードしてNSDataで返します
– dataUsingEncoding
指定した文字コードに変換したNSDataを作成して返します
– dataUsingEncoding:allowLossyConversion
文字列を返します
– description
レシーバーが情報の損失なしで切り替えられる最も速いエンコーディングを返します
– fastestEncoding
レシーバーが情報の損失なしで切り替えられる最も小さいエンコーディングを返します
– smallestEncoding
パス
配列の要素をパス区切り記号を挟んで結合した文字列を返します
+ pathWithComponents
レシーバをパスだと見て、パス区切りで区切られている要素を配列にして返します
– pathComponents
ファイルシステムのパスとしてファイル名が完了しているかを試してみます
– completePathIntoString:caseSensitive:matchesIntoArray:filterTypes
パス名だと見て、ファイルシステムが使う文字コードに変換したC文字列を返します
– fileSystemRepresentation
ファイルシステムと合う文字列なら、YESを返してbufferに文字列を返します
– getFileSystemRepresentation:maxLength
絶対パスかどうか返します
– isAbsolutePath
ファイルパスの最後の部分(/より後)を返します
– lastPathComponent
ファイルパスの拡張子を返します
– pathExtension
~付のディレクトリ(フォルダ)を返します
– stringByAbbreviatingWithTildeInPath
文字列を追加します(最後尾に/が付いていない場合は付加する
– stringByAppendingPathComponent
ファイルパスに拡張子を追加します
– stringByAppendingPathExtension
ファイルパスの最後の部分(/より後)を削除して返します
– stringByDeletingLastPathComponent
文字列から拡張子を取り除きます
– stringByDeletingPathExtension
チルダ付きのパスをフルパスにして返します
– stringByExpandingTildeInPath
シンボリックリンク(エイリアス)のパスをオリジナルファイルのパスにして返します
– stringByResolvingSymlinksInPath
指定した文字をパスとみなして、パスをスタンダード化します
– stringByStandardizingPath
レシーバの前に配列で現したパスを追加して返します
– stringsByAppendingPaths
URL
指定したエンコーディングを使ってURLエンコーディングの文字列を返します
– stringByAddingPercentEscapesUsingEncoding
URLエンコーディング文字列を指定したエンコーディングでNSStringにして返します
– stringByReplacingPercentEscapesUsingEncoding