手動(Command+Shift+R)で表示
[環境設定]-[デバック]-[開始時:] とたどり 「コンソールとデバッカを表示」
[環境設定]-[入力補助]
うまくいった例
NSLog(message);
message は@"hoge"をStringPtr?で渡した
puts("test3");
printf("にほんご");
println(@"にほんご");
でよびだして、
void println(NSString *message){ printf([message UTF8String]); }
うまく行かなかった例
printf(@"test");
この@は下記のような意味を持つ
NSString *str01 = @"test";
System.out.println("test");
Foundationに含まれる
NSString
と
NSMutableString?
である。
NSStringは、Javaでいうところのstatic final Stringである。
そのため、NSMutableString?がJavaのStringに相当する。
NSString *str03 = [str01 stringByAppendingString?:str02];
Javaだと
String str03 = str01 + str02 ;
と表現するところだ。
この長い文字列は、ユーザが探しやすくするためのもので、ユーザがコードをタイピングしやすくすることを意図していないだろう。
NSString *str1 = @"AAA"; NSString *str2 = [str1 stringByAppendingString: [NSString stringWithCString: "BBB" encoding: NSUTF8StringEncoding]];
#define AS(A,B) [(A) stringByAppendingString:([NSString stringWithCString: B encoding: NSUTF8StringEncoding])]
NSString *str2 = AS(str1,"BBB");
idというクラス名になっている。 これの場合のみ例外的にインスタンス生成時に*がいらないObjective Cの*は オブジェクトを宣言しながら値を格納する場合につかっている感じがする。
RegexKit? Framework
http://regexkit.sourceforge.net/
上記のサイトからRegexKitLite?をダウンロードします。
RegexKitLite?-2.2.tar.bz2を展開すると、以下のようになります。
RegexKitLite?.h、RegexKitLite?.mをプロジェクトにコピーする
プロジェクトを選択し、ファイル>情報を見る>ビルド>リンク>他のリンカフラグに-licucoreを設定します。
基本的にNSStringとNSMutableString?のカテゴリとして作られているので、文字列のインスタンスに対して、メッセージを送信する形で使用します。
NSString *searchString = @"This is neat."; NSString *regexString = @"\\b(\\w+)\\b"; NSString *replaceWithString = @"{$1}"; NSString *replacedString = NULL; replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString]; NSLog(@"replaced string: '%@'", replacedString); // 2008-07-01 19:03:03.195 test[68775:813] replaced string: '{This} {is} {neat}.'
繰り返しマッチさせるような場合には、Match Enumeratorを作成するようにとドキュメントには書いてありますが、exmplesディレクトリに同梱されているRKLMatchEnumerator?がそのまま使用できます。
#import <Foundation/NSAutoreleasePool.h> #import "RegexKitLite.h" #import "RKLMatchEnumerator.h"
int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *searchString = @"one\ntwo\n\nfour\n"; NSEnumerator *matchEnumerator = NULL; NSString *regexString = @"(?m)^.*$"; NSLog(@"searchString: '%@'", searchString); NSLog(@"regexString : '%@'", regexString); matchEnumerator = [searchString matchEnumeratorWithRegex:regexString]; NSUInteger line = 0; NSString *matchedString = NULL; while((matchedString = [matchEnumerator nextObject]) != NULL) { NSLog(@"%d: %d '%@'", ++line, [matchedString length], matchedString); } [pool release]; return(0); }
- (NSArray*) search:(NSString*)line { NSMutableArray *resultArray = [NSMutableArray array]; NSCharacterSet* chSet = [NSCharacterSet characterSetWithCharactersInString:@","]; NSScanner* scanner = [NSScanner scannerWithString:line]; NSString* scannedPart = nil; while(![scanner isAtEnd]) { if([scanner scanUpToCharactersFromSet:chSet intoString:&scannedPart]) { [resultArray addObject:scannedPart]; } [scanner scanCharactersFromSet:chSet intoString:nil]; } if( [resultArray count] < 1 ) return nil; return resultArray; }
http://www.atmarkit.co.jp/fcoding/articles/objc/04/objc04a.html