Objective-Cでは文字列を扱う場合にNSStringクラスがよく使われます。具体的なNSStringクラスの使い方は以下のようになります。
§1 文字列の生成
●単純な文字列の生成
1 2 3 |
//単純な文字列の生成 NSString *testStr1 = @"単純な文字列の生成"; printf("testStr1 : %s", [testStr1 UTF8String]); //結果出力("testStr1 : 単純な文字列の生成") |
一番単純な方法です。先頭に「@」を付けて文字列を生成します。
●エンコーディングを指定して生成 その1
1 2 3 |
//エンコーディングを指定して生成1 NSString *testStr2 = [NSString stringWithCString:"エンコーディングを指定して生成1" encoding:NSUTF8StringEncoding]; printf("testStr2 : %s", [testStr2 UTF8String]); //結果出力("testStr2 : エンコーディングを指定して生成1") |
stringWithCStringメソッドを使用して文字列を生成しています。第1引数にC言語形式文字列(@は付けない)、第2引数にエンコーディングを指定します。メモリ割り当てからインスタンスの初期化まで(alloc、init)を一気に行うメソッドです。
「NSUTF8StringEncoding」はUTF-8エンコーディングを表す定数です。Shift-JIS「NSShiftJISStringEncoding」やEUC「NSJapaneseEUCStringEncoding」などの定数もあります。文字列のエンコーディングはソースファイルのエンコーディングと同じものを指定します。
●エンコーディングを指定して生成 その2
1 2 |
NSString *testStr3 = [[NSString alloc] initWithCString:"エンコーディングを指定して生成2" encoding:NSUTF8StringEncoding]; printf("testStr3 : %s", [testStr3 UTF8String]); //結果出力("testStr3 : エンコーディングを指定して生成2") |
initWithCStringメソッドによりC言語形式文字列とエンコーディングを指定しています。initWithCStringはイニシャライザなのでallocを行ってから呼び出します。
●パラメータを埋め込んで生成
1 2 3 4 5 |
//パラメータを埋め込んで生成 NSString *str1 = @"パラメータ"; NSString *str2 = @"生成"; NSString *testStr4 = [NSString stringWithFormat: @"%@を埋め込んで%@", str1 ,str2]; printf("testStr4 : %s", [testStr4 UTF8String]); //結果出力("testStr4 : パラメータを埋め込んで生成") |
stringWithFormatは第1引数にフォーマット文字列、第2引数以降に埋め込む文字列を指定します。このメソッドもalloc、initを自動で行ってくれます。
§2 文字列の操作
●文字列の長さ(文字数)を取得
1 2 3 4 |
//文字列の長さ(文字数)を取得 NSString *str3 = @"パラメータ"; unsigned long len = [str3 length]; printf("len : %ld", len); //結果出力("len : 5") |
lengthメソッドにて文字列の長さ(文字数)を取得することができます。
●文字列を連結する
1 2 3 4 5 |
//文字列を連結する NSString *str4 = @"文字列を"; NSString *str5 = @"連結する"; NSString *testStr5 = [str4 stringByAppendingString:str5]; printf("testStr5 : %s", [testStr5 UTF8String]); //結果出力("testStr3 : 文字列を連結する") |
stringByAppendingStringメソッドにて2つの文字列を連結することができます。
●文字列の一部を取り出す
1 2 3 4 5 6 7 8 9 10 |
//文字列の一部を取り出す NSString *str6 = @"文字列の一部を取り出す"; NSString *testStr6 = [str6 substringToIndex:3]; printf("testStr6 : %s", [testStr6 UTF8String]); //結果出力("testStr6 : 文字列") NSString *testStr7 = [str6 substringFromIndex:3]; printf("testStr7 : %s", [testStr7 UTF8String]); //結果出力("testStr7 : の一部を取り出す") NSString *testStr8 = [str6 substringWithRange:NSMakeRange(2, 3)]; printf("testStr8 : %s", [testStr8 UTF8String]); //結果出力("testStr8 : 列の一") |
substringToIndexメソッドは文字列の先頭から、指定したインデックスの「1つ手前」の文字までを取り出すことができます。インデックスは配列と同様0から始まります。
substringFromIndexメソッドは指定したインデックスの文字から最後までを取り出す事ができます。
substringWithRangeメソッドは引数にNSRangeオブジェクトを指定します。ここではNSMakeRangeメソッドにてNSRangeオブジェクトを生成して渡しています。NSMakeRangeメソッドは第1引数に範囲のスタート位置インデックスを、第2引数に範囲の長さを指定します。
●文字列をトリムする
1 2 3 4 |
//文字列をトリムする NSString *str7 = @" スペースを除去 "; NSString *testStr9 = [str7 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; printf("testStr9 : %s", [testStr9 UTF8String]); //結果出力("testStr9 : スペースを除去") |
stringByTrimmingCharactersInSetメソッドは文字列の両端の指定文字(文字セットで指定)を除去することができます。
【主な文字セット】
whitespaceCharacterSet:空白とタブ
newlineCharacterSet:改行文字
whitespaceAndNewlineCharacterSet:空白とタブ、改行文字
alphanumericCharacterSet:アルファベット、記号、数字
decimalDigitCharacterSet:10進数の数字(0~9)
●文字列内を検索する
1 2 3 4 5 6 7 8 |
//文字列内を検索する NSString *str8 = @"文字列内を検索する"; NSRange resultRange = [str8 rangeOfString:@"検索"]; if (resultRange.location == NSNotFound) { printf("見つかりません"); } else { printf("場所(Index)は: %ld, 長さ%ld です。", resultRange.location, resultRange.length); //結果出力("場所(Index)は: 5, 長さ2 です。") } |
rangeOfStringメソッドは指定文字列が含まれる場合に、その位置や長さをNSRangeオブジェクトとして返します。
●文字列が同じかどうかを判定する
1 2 3 4 5 6 |
//文字列が同じかどうかを判定する NSString *str9 = @"文字列"; NSString *str10 = @"文字列"; if ([str9 isEqualToString:str10]) { printf("str9 と str10 は同じ文字列です。"); //結果出力("str9 と str10 は同じ文字列です。") } |
isEqualToStringメソッドは指定文字列が同じものかどうかを判定することができます。オブジェクトを「==」演算子で比較すると、その値ではなく「同一のインスタンス」かどうかを判定することになるので、ここではisEqualToStringメソッドを使っています。ただし、比較対象がNSStringの場合は「==」演算子で比較しても同じ文字列を値として持っている場合はtrueが返るようになっています。
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)- プロトコル」