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!"

0voto

Kosar Points 34

Selon @Mathieu Godart, c'est la meilleure réponse, mais certaines lignes manquent, toutes les réponses se contentent de réduire les espaces entre les mots, mais lorsque des tabulations sont présentes à la place des espaces, comme ceci : " this is text \t , and\tTab between , so on " sur trois lignes de code nous aurons : la chaîne que nous voulons réduire les espaces blancs

NSString * str_aLine = @"    this is text \t , and\tTab between      , so on    ";
// remplacer les tabulations par des espaces
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\t" withString:@" "];
// réduire les espaces à un seul espace
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@" +" withString:@" "
                                                    options:NSRegularExpressionSearch
                                                      range:NSMakeRange(0, str_aLine.length)];
// supprimer les espaces au début et à la fin de la chaîne
str_aLine = [str_aLine stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

le résultat est

"this is text , and Tab between , so on"

sans remplacer la tabulation, le résultat serait :

"this is text    , and  Tab between , so on"

0voto

Vous pouvez également utiliser un simple argument while. Il n'y a pas de magie RegEx, donc peut-être est-il plus facile à comprendre et à modifier à l'avenir :

while([votreObjetNSString replaceOccurrencesOfString:@"  "
                         withString:@" "
                         options:0
                         range:NSMakeRange(0, [votreObjetNSString length])] > 0);

-1voto

Matt Gallagher Points 10431

Solution alternative: obtenez une copie d'OgreKit (la bibliothèque d'expressions régulières Cocoa).

  • OgreKit (page web japonaise -- le code est en anglais)
  • OgreKit (Google autotraduction):

L'ensemble de la fonction est donc :

NSString *theStringTrimmed =
   [theString stringByTrimmingCharactersInSet:
        [NSCharacterSet whitespaceAndNewlineCharacterSet]];
OGRegularExpression  *regex =
    [OGRegularExpression regularExpressionWithString:@"\s+"];
return [regex replaceAllMatchesInString:theStringTrimmed withString:@" "]);

Court et simple.

Si vous recherchez la solution la plus rapide, une série d'instructions soigneusement construite utilisant NSScanner fonctionnerait probablement le mieux, mais ce ne serait nécessaire que si vous prévoyez de traiter de gros blocs de texte (plusieurs mégaoctets).

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