LoginSignup
95

More than 5 years have passed since last update.

[Objective-C] 文字列操作まとめ

Last updated at Posted at 2014-02-13

色々とめんどくさいので文字列操作のメモ。


正規表現を作る

利用するクラス。

  • NSRegularExpressionクラス
  • NSTextCheckingResultクラス
NSError *error = nil;
NSString *str = @"some text";
NSString *pattern = @"[hoge|fuga]";

// パターンから正規表現を生成する
NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];

// 正規表現を適用して結果を得る
NSTextCheckingResult *match = [regexp firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];

// 正規表現でマッチした部分を取り出す
NSLog(@"matches: %d", match.numberOfRanges); // マッチした数
NSLog(@"%@", [str substringWithRange:[match rangeAtIndex:0]]); // マッチした文字列全部
NSLog(@"%@", [str substringWithRange:[match rangeAtIndex:1]]); // 最初にマッチした部分
NSLog(@"%@", [str substringWithRange:[match rangeAtIndex:2]]); // 以降、マッチした分続く

// 正規表現でマッチした部分を置き換える
NSString *template = @"This is template. first match is $0";
NSString *result = [regexp stringByReplacingMatchesInString:str options:0 range:NSMakeRange(0, str.length) withTemplate:template];

NSStringによる文字列操作

NSStringクラスのインスタンスメソッド

Method description
-(unsigned int)length 文字列の長さを取得
-(BOOL)isEqualToString:(NSString *)string 同じ文字列であるかを比較
-(NSString *)stringByAppendingString:(NSString *)string 文字列を結合
-(NSString *)substringToIndex:(unsigned)anIndex 文字列の切り出し
-(NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set 文字列のトリム
-(BOOL)hasPrefix:(NSString *)string 文字列の先頭比較
-(BOOL)hasSuffix:(NSString *)string 文字列の後方比較
-(NSRange)rangeOfString:(NSString *)aString 文字列の検索
-(int)intValue int型にキャスト
-(float)floatValue float型にキャスト
-(double)doubleValue double型にキャスト
-(BOOL)boolValue BOOL型にキャスト
-(NSArray *)componentsSeparatedByString:(NSString *)separator 文字列を分割する
-(NSString *)stringByAppendingPathExtension:(NSString *)ext ファイルパスの末尾にファイルの拡張子を追加する
-(NSString *)stringByAppendingPathComponent:(NSString *)aString ファイルパスの末尾にファイル名を追加する
-(NSString *)pathExtension ファイルパスの拡張子を取得する
-(NSString *)lastPathComponent ファイルパスからファイル名を取得する
-(instancetype)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error ファイルから文字列を取得する
-(instancetype)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error URLから文字列を取得する
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error 文字列をファイルに保存

フォーマットを利用して、変数から文字列を生成

int i = 100;
NSString *str = [[NSString alloc] stringWithFormat:@"i = %d;", i];

NSLogでの出力と同じ。

NSStringオブジェクト同士を結合

NSString *str1 = @"abc";
NSString *str2 = @"def";
NSString *str3 = [str1 stringByAppendingString:str2];

NSStringオブジェクトにフォーマットした文字列を連結

int i = 256;
NSString *str1 = @"i = ";
NSString *str2 = [str1 stringByAppendingFormat:@"%dです", i];

文字列を分割する

NSString *str = @"abc:def:ghi";
NSArray *arr = [str componentsSeparatedByString:@":"];

NSStringオブジェクトの内容をファイルに保存

NSString *str = @"abc";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; //paths[0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];
[str writeToFile:dataPath atomically:YES encoding:NSUTF8StringEncoding error:nil];

インターネット上からNSStringオブジェクトを作る

NSURL *url = [NSURL URLWithString:@"http://example.com/sample.txt"];
NSString *str = [[NSString alloc] initWithCoontentsOfURL:url encoding:NSUTF8Encoding error:nil];

ファイルの内容からNSStringオブジェクトを作る

NSString *str;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentDirectory stringByAppendingPathComponent:@"test.txt"];
str = [[NSString alloc] initWithContentsOfFile:dataPath encoding:NSUTF8Encoding error:nil];

ファイルパスからファイル名だけ取り出す

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];
NSString *documentsDirectoryName = [documentsDirectory lastPathComponent];
NSString *fileName = [dataPath lastPathComponent];

ファイルパスからファイルの拡張子を取り出す

NSArray *paths = NSSearchPathForDirectoriesDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];
NSString *ext = [dataPath pathExtention];

ファイルパスの末尾にファイル名を追加する

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"test.txt"];

ファイルパスの末尾にファイルの拡張子を追加する

if ([name pathExtention] isEqualToString:@""]) {
    fileName = [name stringByAppendingPathExtention:@"txt"];
}
else {
    fileName = name;
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
95