NSMutableString
変更可能な文字列クラス
解説
変更可能な文字列クラスです
継承 | NSString : NSObject |
準拠 | NSCopying (NSString) |
NSMutableCopying (NSString) | |
NSSecureCoding (NSString) | |
NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | OS X v10.0 以降 |
iOS 2.0 以降 | |
定義 | NSString.h |
概要
一旦作成したあと変更が可能な文字列のクラスです。
書体や色などの情報を持った属性付文字列はNSMutableAttributedStringクラスを使います。
C言語のフレームワークである、Core FoundationのCFMutableStringRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。
ARC環境では、管理対象のオブジェクトキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。
詳細はNSStringのページを参照してください。
生成と初期化
仮の容量を指定して変更可能な文字列を作成するクラスメソッド(+ stringWithCapacity: )、初期化メソッド(– initWithCapacity)があります。
容量は効率化のためにヒントとして使われ、必要に応じて容量は拡張されます。サイズを制限するものではありません。
NSMutableString *muString = [[NSMutableString alloc] initWithCapacity:0]; [muString appendString:@"Hello!"];
NSMutableStringの上位クラスであるNSStringのメソッドも使えますので、ファイルやURL、フォーマット文字列、C文字列から作成することもできます。
文字列の修正
追加
末尾に文字列を追加して返すメソッド(- appendFormat)や、末尾にフォーマット文字列を追加して返すメソッド(- appendString)があります。
NSMutableString *muString = [[NSMutableString alloc] initWithCapacity:0]; [muString appendString:@"Hello"]; [muString appendString:@"!"]; NSLog(@"%s : %@",__FUNCTION__ ,muString); //=> -[OOOAppDelegate method002] : Hello!
削除
指定した範囲の文字列を削除するメソッド(- deleteCharactersInRange)があります。
下記の例では、文字列@"abcdefghijklmnopqrstuvexyz"のインデックス5から10文字分が削除されます。
インデックスは0から始まる(この場合のインデックス0の文字は@"a")のでインデックス5の文字は@"f"になり、fから10文字分の@"o"までが削除の範囲となります。
指定する範囲がレシーバの範囲を超える(インデックスが30である場合など)と例外【NSRangeException】が投げられます。
NSMutableString *muString = [NSMutableString stringWithCapacity:0]; [muString appendString:@"abcdefghijklmnopqrstuvexyz"]; [muString deleteCharactersInRange:NSMakeRange(5,10)]; NSLog(@"%s : %@",__FUNCTION__ ,muString); //=> -[OOOAppDelegate method003] : abcdepqrstuvexyz
挿入
指定した位置に文字列を挿入するメソッド(- insertString:atIndex)があります。
下記の例では、文字列@"abcdefghijklmnopqrstuvexyz"のインデックス4の場所(eがある場所)に文字列@"xxxxxxx"が挿入され、abcdxxxxxxxefghijklmnopqrstuvexyzという文字列になります。
挿入する文字列がnilであってはいけません。
NSMutableString *muString = [NSMutableString stringWithCapacity:0]; [muString appendString:@"abcdefghijklmnopqrstuvexyz"]; [muString insertString:@"xxxxxxx" atIndex:4]; NSLog(@"%s : %@",__FUNCTION__ ,muString); //=> -[OOOAppDelegate method004] : abcdxxxxxxxefghijklmnopqrstuvexyz
置き換え
文字列を置き換えるメソッド(- replaceCharactersInRange:withString)、さらに置き換える際にオプションとして正規表現が使えるメソッド(- replaceOccurrencesOfString:withString:options:range)があります。
正規表現についてはNSRegularExpressionクラスを参照してください。
{ NSMutableString *muString = [[NSMutableString alloc] initWithCapacity:0]; [muString appendString:@"If into in onto of often on and ON"]; [muString replaceOccurrencesOfString:@"\\b(i|o)(f|n)\\b" //\\bはスペース(i|o)はiまたはo withString:@"$2$1" //2番目の要素が前にきて、1番目の要素があとに来る options:NSRegularExpressionSearch range:NSMakeRange(0,[muString length]) ]; NSLog(@"%s : %@",__FUNCTION__ ,muString); //=>-[OOOAppDelegate method001] : If into ni onto fo often no and ON }
作成
使用可能
参照
文字列の修正
文字列を指定した書式で末尾に追加します
– appendFormat
文字列を末尾に追加します
– appendString
指定した範囲の文字列を削除します
– deleteCharactersInRange
変更可能な文字列に文字列を指定した位置に挿入します
– insertString:atIndex
変更可能な文字列の指定した範囲の文字列を別の文字列と置き換えます
– replaceCharactersInRange:withString
変更可能な文字列の指定した範囲の文字列を別の文字列と置き換えます
– replaceOccurrencesOfString:withString:options:range
文字列をセットします変更可能な文字列の全ての文字列が置き変わります
– setString