色々とめんどくさいので文字列操作のメモ。
正規表現を作る
利用するクラス。
-
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;
}