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" 解析字符串,因为有时时间之间有两个空格,有时是一个空格,等等。所以我所做的是:

    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 回答