1

基本的に、文字列を表示するときに書式設定するために、一部の領域に余分な空白を含む文字列に日付を記入した文字列があります。したがって、文字列は次のようになります

6:00 PM 
6:00 PM  4:00 AM
6:00 PM  4:00 AM 12:00 PM
6:00 pm  4:00 AM 12:00 PM  1:00 AM

NSScanner を使用して @"M" で文字列を解析できると考えました。時間の間に 2 つのスペースがある場合もあれば、1 つのスペースがある場合もあるためです。

    NSScanner *theScanner = [NSScanner scannerWithString:theString];
    NSString *separatorString = @"M";
    NSString *container;
    NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:_lastIndexPath.row];

    while ([theScanner isAtEnd] == NO) {
        [theScanner scanUpToString:separatorString intoString:&container];
        [array addObject:container];

        [theScanner setScanLocation:[theScanner scanLocation] + 1];
    }

問題は、コンテナ オブジェクトで M が取得されないことです。これは、コンテナ オブジェクトがスキャンされますが、セパレータ文字列が含まれていないためです。次のように追加する前に、新しい NSString を手動で作成する必要があります

[array addObject:[NSString stringWithFormat:%@M", container]];

または、このシナリオで NSScanner を使用するより良い方法はありますか? 私は以前にNSScannerを実際に使用したことがありません。ありがとう。

4

1 に答える 1

5

それはうまくいくでしょう。しかし、最後Mに遭遇し、スキャナーの位置を +1 に設定すると、範囲外になります!? 気をつけてください。

NSStringインスタンスメソッドの使用を検討しましたか?

- (NSArray *)componentsSeparatedByString:(NSString *)separator

- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator

別の方法として、文字列を単一のスペースで区切ってコンポーネントに分割し、それらのコンポーネントを配列に取得することができます。複数のスペースがある場合、一部のコンポーネントの最初または最後にスペースがあります。それらをトリミングできます。

例:

NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];
produces an array { @"Norman", @"Stanley", @"Fletcher" }.

これらのメソッドの詳細については、NSString クラス リファレンスを参照してください。

于 2012-04-04T06:12:08.510 に答える