componentsSeparatedByCharactersInSet дает мне кучу пустых строк - PullRequest
1 голос
/ 07 октября 2010

Хорошо, прежде всего, я использую GNUStep как способ изучения Objective-C, поэтому могут быть некоторые различия между GNU и реализацией Apple. Это сказанное, это не должно затронуть мой вопрос.

В любом случае, чтобы понять мою головоломку, пожалуйста, разберите следующий код на ваши визуальные сосуды:

#import <Cocoa/Cocoa.h>
int main()
{
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  NSEnumerator * LineEnumerator = [[NSArray arrayWithObjects: @"Jim     1", @"Steve   3", nil] objectEnumerator];
  NSString * s;
  while((s = [LineEnumerator nextObject]))
  {
    NSArray * parts = [s componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSLog(@"%@", parts);
  }
  [pool drain];
  return NO;
}

И следующий вывод:

2010-10-07 10:03:50.809 a.out[24512] (Jim, "", "", "", "", 1)
2010-10-07 10:03:50.812 a.out[24512] (Steve, "", "", 3)

Мой ожидаемый результат будет:

2010-10-07 10:03:50.809 a.out[24512] (Jim, 1)
2010-10-07 10:03:50.812 a.out[24512] (Steve, 3)

Но кажется, что componentSeparatedByCharactersInSet - единственный метод, который приближается к тому, что я ищу (кстати, я хочу быть готовым к любой смеси пробелов, табуляции или других пробельных символов). Есть ли простой способ сделать это со стандартными библиотеками без написания нового метода?

Ответы [ 2 ]

5 голосов
/ 07 октября 2010

Я думаю, вам придется использовать NSScanner:

while((s = [LineEnumerator nextObject]))
{
    NSMutableArray *parts = [[NSMutableArray alloc] initWithCapacity:1];

    NSScanner *scanner = [NSScanner scannerWithString:s];
    NSString *token;
    while ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:&token]) {
        [parts addObject:token];
    }

    NSLog(@"%@", parts);
    [parts release];
}   
0 голосов
/ 07 октября 2010

Если у вас нет новых строк, почему бы просто не использовать вместо этого [NSCharacterSet whitespaceCharacterSet]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...