1

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;
}
4

1 に答える 1

2

このコードはハックですが、必要な出力が生成されるようです。
予期しない入力 (記述された形式ではない文字列、nil 文字列...) でテストされていませんが、開始する必要があります。

- (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 のドキュメントを掘り下げて何が欠けているかを把握し、手動の文字列トリミングに注意する必要がありました。

于 2011-02-27T21:22:11.747 に答える