2011-07-25 1 views
1

Pour les fins d'analyse, il était nécessaire de remplacer les virgules dans les quotas avec de l'espace. Je n'ai pas trouvé et trouvé de solution dans la classe NSString et j'ai écrit celui-ci. Il fonctionne, mais je voudrais connaître votre avis, s'il y a approche plus simple:méthode pour remplacer la virgule entre guillemets dans NSString, s'il vous plaît vérifier mon

- (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; 

} 

Répondre

2

Je n'ai pas testé mais puisque vous ne semblez pas être préoccupé par des citations échappées:

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]; 
    } 
} 
+0

Votre code est plus élégant, mais si vous cochez cette chaîne avec un quota ouvert et non fermé, le code supprime toutes les virgules à la fin. NSString * line = @ "\" 1234,5678 \ ", abcd, ohoho \" jkl, deux \ ", un \" ,,, "; – Michael

+0

Vous pouvez vérifier le nombre de composants et si le nombre de chaînes est pair il, le rejeter comme mal formé. – JeremyP

Questions connexes