0

\n が文字列に追加されたときに NSScanner が適切にスキャンするかどうかを知っている人はいますか?

たとえば、スキャンする文字列 (myString) "\nTest\nSuper\n" があります。

NSScanner *scanner = [NSScanner scannerWithString:myString];
NSString *str = @"Super";
if( [scanner scanString:str intoString:nil] )
{
    //It never reaches here
}

「スーパー」が表示されない理由はありますか?これは、\n 記号がないときに機能していました。

ありがとう

4

1 に答える 1

1

-[NSScanner scanString:intoString:]NO文字列の先頭からスキャンしようとしていて、部分文字列 'Super' がそこにないため、 が返されます。

これを使用して、何が起こるかを説明します。

BOOL success;
NSString *whatDidIGet;

// 'success' is YES, and 'whatDidIGet' contains "Test\n"
whatDidIGet = nil;
success = [scanner scanUpToString:str intoString:&whatDidIGet];

// 'success' is YES, and 'whatDidIGet' contains "Super"
whatDidIGet = nil;
success = [scanner scanString:str intoString:&whatDidIGet];

// 'success' is NO, and 'whatDidIGet' is nil.
whatDidIGet = nil;
success = [scanner scanUpToString:str intoString:&whatDidIGet];

最初の改行文字が無視される理由は、スキャナー (設定した方法) がデフォルトで空白と改行を無視し、最初の改行をスキップするためです。最後に、やはり、空白と改行をスキップするため、whatDidIGetnil です。

編集:

スキャナーをインスタンス化した直後にこれを挿入した場合:

[scanner setCharactersToBeSkipped:[[[NSCharacterSet alloc] init] autorelease]];

whatDidIGet1 回目と 3 回目のスキャンですべての改行文字が表示されます。

益々のご活躍をお祈り申し上げます。

于 2012-09-20T23:12:45.670 に答える