132 votes

Supprime tous les espaces de la chaîne NSString.

J'ai essayé de me débarrasser des espaces blancs dans un NSString mais aucune des méthodes que j'ai essayées n'a fonctionné.

J'ai "this is a test" et je veux obtenir "thisisatest" .

J'ai utilisé whitespaceCharacterSet qui est censé éliminer les espaces blancs.

NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];

mais je continue à obtenir la même chaîne avec des espaces. Avez-vous des idées ?

299voto

AliSoftware Points 21493

stringByTrimmingCharactersInSet supprime uniquement les caractères du début et de la fin de la chaîne, et non ceux du milieu.

1) Si vous devez supprimer uniquement un caractère donné (par exemple le caractère espace) de votre chaîne de caractères, utilisez :

[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]

2) Si vous avez vraiment besoin de supprimer un ensemble de caractères (à savoir non seulement le caractère espace, mais aussi tout caractère d'espacement comme l'espace, la tabulation, l'espace insécable, etc.), vous pouvez diviser votre chaîne en utilisant la fonction whitespaceCharacterSet puis en joignant à nouveau les mots en une seule chaîne :

NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];

Notez que cette dernière solution a l'avantage de traiter tous les caractères d'espacement et pas seulement les espaces, mais elle est un peu moins efficace que la méthode de calcul de l'espacement. stringByReplacingOccurrencesOfString:withString: . Donc, si vous n'avez besoin que de supprimer le caractère espace et que vous êtes sûr de ne pas avoir d'autre caractère d'espacement que le simple caractère espace, utilisez la première méthode.

31voto

n8tr Points 686

Je préfère utiliser une expression rationnelle comme celle-ci :

NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                          range:NSMakeRange(0, [myStringlength])];
 //myNewString will be @"thisisatest"

Vous pouvez vous créer une catégorie sur NSString pour vous faciliter encore plus la vie :

- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];

}

Voici également une méthode de test unitaire sur ce sujet :

- (void) testRemoveAllWhitespace
{
    NSString *testResult = nil;

    NSArray *testStringsArray        = @[@""
                                         ,@"    "
                                         ,@"  basicTest    "
                                         ,@"  another Test \n"
                                         ,@"a b c d e f g"
                                         ,@"\n\tA\t\t \t \nB    \f  C \t  ,d,\ve   F\r\r\r"
                                         ,@"  landscape, portrait,     ,,,up_side-down   ;asdf;  lkjfasdf0qi4jr0213 ua;;;;af!@@##$$ %^^ & *  * ()+  +   "
                                         ];

    NSArray *expectedResultsArray   = @[@""
                                        ,@""
                                        ,@"basicTest"
                                        ,@"anotherTest"
                                        ,@"abcdefg"
                                        ,@"ABC,d,eF"
                                        ,@"landscape,portrait,,,,up_side-down;asdf;lkjfasdf0qi4jr0213ua;;;;af!@@##$$%^^&**()++"
                                        ];

    for (int i=0; i < [testStringsArray count]; i++)
    {
        testResult = [testStringsArray[i] removeAllWhitespace];
        STAssertTrue([testResult isEqualToString:expectedResultsArray[i]], @"Expected: \"%@\" to become: \"%@\", but result was \"%@\"",
                     testStringsArray[i], expectedResultsArray[i], testResult);
    }
}

11voto

ender Points 2946

Tâche facile en utilisant stringByReplacingOccurrencesOfString

NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];

2voto

Siva Murugan Points 9

StringByReplacingOccurrencesOfString remplacera tous les espaces blancs de la chaîne de caractères, mais pas les espaces de début et de fin.

Utilisez

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

1voto

anand madhav Points 363

Cela permet de supprimer tout espace lorsque vous récupérez du texte dans un champ de texte, mais si vous voulez supprimer l'espace entre les chaînes, vous pouvez utiliser

xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];

Il remplacera les espaces vides par des espaces vides et les champs vides sont pris en charge par la méthode ci-dessous :

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

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