метод замены запятой между кавычками в NSString, пожалуйста, проверьте мой - PullRequest
1 голос
/ 25 июля 2011

Для разбора необходимо было заменить запятые внутри квот пробелом.Я не нашел и решение в классе NSString и написал этот.Это работает, но я хотел бы узнать ваше мнение, если есть более простой подход:

- (NSString *) replaceBetweenQuotesInString:(NSString*)line {

    const char *buffer = [line UTF8String];

    NSMutableIndexSet *evenIndexes = [NSMutableIndexSet indexSet];    

    NSMutableIndexSet *oddIndexes = [NSMutableIndexSet indexSet];

    BOOL evenOdd = YES;

    for (unsigned int i = 0; i < [line length]; i++) {


        if (buffer[i] == '"'){
            if (evenOdd)
                [evenIndexes addIndex:i];
            else
                [oddIndexes addIndex:i];

        evenOdd = !evenOdd;
        }
    }

    if ([evenIndexes count] != [oddIndexes count] )
        [evenIndexes removeIndex:[evenIndexes lastIndex]];

    int totalRanges = (int) [evenIndexes count];

    for (int i = 0; i < totalRanges; i++) {

        NSRange range = NSMakeRange([evenIndexes firstIndex], [oddIndexes firstIndex] - [evenIndexes firstIndex]);
        [evenIndexes removeIndex:[evenIndexes firstIndex]];
        [oddIndexes removeIndex:[oddIndexes firstIndex]];
        line = [line stringByReplacingOccurrencesOfString:@"," withString:@" " options:NSLiteralSearch range:range];

    }

    [evenIndexes removeAllIndexes];
    [oddIndexes removeAllIndexes];    

    return line;

}

1 Ответ

2 голосов
/ 25 июля 2011

Я не проверял это, но так как вы, кажется, не беспокоитесь о экранированных кавычках:

NSMutableString* result = [[NSMutableString alloc] init];
NSArray* components = [line componentsSeparatedByString: @"\""];
for (int i = 0 ; i < [components count] ; ++i)
{
    if (i % 2 == 0)
    {
        [result appendString: [components objectAtIndex: i]];
    }
    else
    {
        NSString* fixed = [[components objectAtIndex: i] stringByReplacingOccurrencesOfString: @"," 
                                                                                   withString: @" "];
        [result appendFormat: @"\"%@\"", fixed];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...