NSScanner Удалить подстроку цитату из NSString - PullRequest
1 голос
/ 27 февраля 2011

у меня NSString's в виде Johnny likes "eating" apples. Я хочу удалить цитаты из моих строк, чтобы.

Джонни любит "есть" яблоки

становится

Джон любит яблоки

Я играл с NSScanner, чтобы добиться цели, но я получаю некоторые сбои.

- (NSString*)clean:(NSString*) _string
{   
   NSString *string = nil;
   NSScanner *scanner = [NSScanner scannerWithString:_string];
   while ([scanner isAtEnd] == NO)  
   {
      [scanner scanUpToString:@"\"" intoString:&string];
      [scanner scanUpToString:@"\"" intoString:nil];
      [scanner scanUpToString:@"." intoString:&string]; // picked . becuase it's not in the string, really just want rest of string scanned
   }
   return string;
}

1 Ответ

2 голосов
/ 28 февраля 2011

Этот код взломан, но, кажется, выдает желаемый результат.
Он не был протестирован с неожиданными данными (строка не в описанной форме, ноль строка ...), но должен помочь вам начать работу.

- (NSString *)stringByStrippingQuottedSubstring:(NSString *) stringToClean
{   
    NSString *strippedString,
             *strippedString2;

    NSScanner *scanner = [NSScanner scannerWithString:stringToClean];

    [scanner scanUpToString:@"\"" intoString:&strippedString];                          // Getting first part of the string, up to the first quote
    [scanner scanUpToString:@"\" " intoString:NULL];                                    // Scanning without caring about the quoted part of the string, up to the second quote

    strippedString2 = [[scanner string] substringFromIndex:[scanner scanLocation]];     // Getting remainder of the string

    // Having to trim the second part of the string
    // (Cf. doc: "If stopString is present in the receiver, then on return the scan location is set to the beginning of that string.")
    strippedString2 = [strippedString2 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\" "]];

    return [strippedString stringByAppendingString:strippedString2];
}

Я вернусь (намного) позже, чтобы почистить его и углубиться в документацию класса NSScanner, чтобы выяснить, чего мне не хватает, и мне пришлось позаботиться о ручной обрезке струн.

...