*Consoleウィンドウってどうやってだすの? [#f8e6c9dd]
手動(Command+Shift+R)で表示
**常に出す方法 [#ha9d87d8]
[環境設定]-[デバック]-[開始時:]
とたどり
「コンソールとデバッカを表示」
*コード補完ってどうするの [#v38cd58a]
[環境設定]-[入力補助]
*printfってどうやるんだっけ? [#hbae9b6e]
うまくいった例
NSLog(message);
message は@"hoge"をStringPtrで渡した
puts("test3");
printf("にほんご");
**メソッドをつくって呼び出す例もやってみた [#c680213c]
println(@"にほんご");
でよびだして、
void println(NSString *message){
printf([message UTF8String]);
}
うまく行かなかった例
printf(@"test");
この@は下記のような意味を持つ
NSString *str01 = @"test";
System.out.println("test");
*Objective-Cの文字列クラス [#yf8ad7bb]
Foundationに含まれる
NSString
と
NSMutableString
である。
NSStringは、Javaでいうところのstatic final Stringである。
そのため、NSMutableStringがJavaのStringに相当する。
**文字列の連結 [#t886d2c5]
NSString *str03 = [str01 stringByAppendingString:str02];
Javaだと
String str03 = str01 + str02 ;
と表現するところだ。
この長い文字列は、ユーザが探しやすくするためのもので、ユーザがコードをタイピングしやすくすることを意図していないだろう。
**マクロを使った文字列連結例 [#x528d9ca]
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");
**JavaでいうところのObjectってどうなってるの? [#a833813d]
idというクラス名になっている。
これの場合のみ例外的にインスタンス生成時に*がいらないObjective Cの*は オブジェクトを宣言しながら値を格納する場合につかっている感じがする。
*文字列の改行の注意点 [#r51cee37]
-ユーザが直接入力する改行は「CR」
-クリップボード(ペーストボード)を介して入力する改行は「LF」
-ファイルからNSStringに読み込まれる改行コードは「元のまま」
*正規表現 [#x4dec903]
RegexKit Framework
http://regexkit.sourceforge.net/
上記のサイトからRegexKitLiteをダウンロードします。
RegexKitLite-2.2.tar.bz2を展開すると、以下のようになります。
-RegexKitLite.h
-RegexKitLite.m
-RegexKitLite.html
-examples
--RKLMatchEnumerator.h
--RKLMatchEnumerator.m
--NSString-HexConversion.h
--NSString-HexConversion.m
--link_example.m
--main.m
とりあえず、RegexKitLite.hとRegexKitLite.mの2つのファイルをコピーすれば一通りの正規表現は使えるようになります。
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がそのまま使用できます。
**以下はドキュメントに掲載のサンプルです。 [#z3dd2386]
#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);
}
*文字列をカンマで区切る [#m3a9e7f3]
- (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