NSStringクラスで保持している文字列は直接変更することができません。たくさんのメソッドが用意されていますが、保持している文字列を直接変更しているのではなく、処理結果を新しいNSStringオブジェクトとして返しています。
文字列オブジェクトを変更したい場合はNSMutableStringクラスを使用します。Objective-CではこのようなNSMutable***クラス(変更できる)とNS***クラス(変更できない)のようなペアがよくあるので覚えておくと良いと思います。NSMutableStringクラスの使い方は以下の通りです。
§1 文字列の生成
●文字列(変更可能)の生成
1 2 3 4 5 |
//文字列(変更可能)の生成 NSMutableString *mTestStr1 = [NSMutableString stringWithString:@"可変"]; NSMutableString *mTestStr2 = [NSMutableString stringWithCString:"文字列"encoding:NSUTF8StringEncoding]; NSMutableString *mTestStr3 = [NSMutableString stringWithFormat:@"%@%@", mTestStr1, mTestStr2]; printf("mTestStr3 : %s", [mTestStr3 UTF8String]); //結果出力("mTestStr3 : 可変文字列") |
NSMutableStringはNSStringのサブクラスなので、NSStringのメソッドを使うことができます。ここではNSStringのメソッドであるstringWithString、stringWithCString、stringWithFormatの3種類を使用してインスタンスを生成しています。
§2 文字列の操作
●文字列を変更する
1 2 3 |
//文字列を変更する [mTestStr1 setString:@"文字列を変更する"]; printf("mTestStr1 : %s", [mTestStr1 UTF8String]); //結果出力("wmTestStr1 : 文字列を変更する") |
ここでは、mTestStr1の保持している文字列を直接変更しています。
●文字列を追加する
1 2 3 4 |
//文字列を追加する [mTestStr1 appendString:@" 追加文字列1"]; [mTestStr1 appendFormat:@"%@", @" 追加文字列2"]; printf("mTestStr1 : %s", [mTestStr1 UTF8String]); //結果出力("wmTestStr1 : 文字列を変更する追加文字列1 追加文字列2") |
appendStringメソッド、appendFormatメソッドを使ってmTestStr1の後ろに文字列を追加しています。
●指定したインデックスの位置に文字列を挿入する
1 2 3 |
//指定したインデックスの位置に文字列を挿入する [mTestStr1 insertString:@" 挿入文字列" atIndex:8]; printf("mTestStr1 : %s", [mTestStr1 UTF8String]); //結果出力("wmTestStr1 : 文字列を変更する挿入文字列追加文字列1 追加文字列2") |
insertString:atIndexメソッドを使って、指定インデックスの位置に文字列を挿入しています。
●指定範囲の文字列を削除する
1 2 3 |
//指定範囲の文字列を削除する [mTestStr1 deleteCharactersInRange:NSMakeRange(8, 20)]; printf("mTestStr1 : %s", [mTestStr1 UTF8String]); //結果出力("wmTestStr1 : 文字列を変更する") |
deleteCharactersInRangeメソッドで文字列を削除しています。削除する範囲はNSRangeオブジェクトを渡して範囲指定します。ここではインデックス8から数えて20文字数分を削除しています。
●指定範囲の文字列を置換する
1 2 3 |
//指定範囲の文字列を置換する [mTestStr1 replaceCharactersInRange:NSMakeRange(4, 2) withString:@"置換"]; printf("mTestStr1 : %s", [mTestStr1 UTF8String]); //結果出力("wmTestStr1 : 文字列を置換する") |
replaceCharactersInRange:withStringメソッドを使用して指定範囲の文字列を置換しています。置換する範囲はNSRangeオブジェクトを渡して範囲指定します。ここではインデックス4から数えて2文字数分を削除しています。
Objective-C 基礎 目次
以下の記事も参考にして頂ければと思います。
「Objective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成」
「Objective-C 基礎(2)- Objective-Cの概要とメソッドの呼び出し」
「Objective-C 基礎(3)- クラス定義の方法」
「Objective-C 基礎(4)- クラスの使い方」
「Objective-C 基礎(5)- クラスメソッドとインスタンスメソッド」
「Objective-C 基礎(6)- 変数のスコープとプロパティ」
「Objective-C 基礎(7)- 変数のデータ型」
「Objective-C 基礎(8)- 文字列とNSStringクラス」
「Objective-C 基礎(9)- 可変文字列とNSMutableStringクラス」
「Objective-C 基礎(10)- Objective-Cの配列」
「Objective-C 基礎(11)- Objective-Cの連想配列」
「Objective-C 基礎(12)- ループ処理」
「Objective-C 基礎(13)- プロトコル」