91 votes

Réduire les séquences d'espaces blancs en un seul caractère et supprimer les espaces vides dans la chaîne

Considérez l'exemple suivant :

"    Hello      this  is a   long       string!   "

Je veux le convertir en :

"Hello this is a long string!"

6voto

Barry Wark Points 73462

Cela devrait le faire...

NSString *s = @"this is    a  string    with lots  of     white space";
NSArray *comps = [s componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSMutableArray *words = [NSMutableArray array];
for(NSString *comp in comps) {
  if([comp length] > 1)) {
    [words addObject:comp];
  }
}

NSString *result = [words componentsJoinedByString:@" "];

4voto

Daniel Dickison Points 15182

Une autre option pour les regex est RegexKitLite, qui est très facile à intégrer dans un projet iPhone :

[theString stringByReplacingOccurencesOfRegex:@" +" withString:@" "];

4voto

sinh99 Points 2275

Essayez cela

NSString *theString = @"    Bonjour      ceci  est une   longue       chaine!   ";

while ([theString rangeOfString:@"  "].location != NSNotFound) {
    theString = [theString stringByReplacingOccurrencesOfString:@"  " withString:@" "];
}

3voto

dmercredi Points 1824

Voici un extrait d'une extension NSString, où "self" est l'instance de NSString. Il peut être utilisé pour condenser les espaces blancs contigus en un seul espace en passant [NSCharacterSet whitespaceAndNewlineCharacterSet] et ' ' comme arguments.

- (NSString *) stringCollapsingCharacterSet: (NSCharacterSet *) characterSet toCharacter: (unichar) ch {
int fullLength = [self length];
int length = 0;
unichar *newString = malloc(sizeof(unichar) * (fullLength + 1));

BOOL isInCharset = NO;
for (int i = 0; i < fullLength; i++) {
    unichar thisChar = [self characterAtIndex: i];

    if ([characterSet characterIsMember: thisChar]) {
        isInCharset = YES;
    }
    else {
        if (isInCharset) {
            newString[length++] = ch;
        }

        newString[length++] = thisChar;
        isInCharset = NO;
    }
}

newString[length] = '\0';

NSString *result = [NSString stringWithCharacters: newString length: length];

free(newString);

return result;
}

2voto

apalvai Points 126

Suivant les deux expressions régulières fonctionneraient en fonction des besoins

  1. @" +" pour correspondre aux espaces blancs et aux tabulations
  2. @"\\s{2,}" pour correspondre aux espaces blancs, aux tabulations et aux sauts de ligne

Ensuite, appliquez la méthode d'instance de nsstring stringByReplacingOccurrencesOfString:withString:options:range: pour les remplacer par un seul espace blanc.

par exemple

[string stringByReplacingOccurrencesOfString:regex withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, [string length])];

Remarque : Je n'ai pas utilisé la bibliothèque 'RegexKitLite' pour la fonctionnalité ci-dessus pour iOS 5.x et versions ultérieures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X