web-dev-qa-db-fra.com

Supprimer tous les espaces de NSString

J'ai essayé de supprimer les espaces 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 supposé éliminer les espaces blancs.

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

mais j'ai continué à obtenir la même chaîne avec des espaces. Des idées?

131
marsalal1014

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

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

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

2) Si vous devez vraiment supprimer un ensemble de caractères (à savoir non seulement le caractère espace, mais tout caractère blanc tel que espace, tabulation, espace insécable, etc.), vous pouvez scinder votre chaîne à l'aide de la whitespaceCharacterSet puis reliant les mots dans une chaîne:

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

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

298
AliSoftware

Je préfère utiliser regex comme ceci:

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

Vous pouvez créer une catégorie sur NSString pour vous simplifier la vie:

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

}

Voici une méthode de test unitaire sur elle aussi:

- (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);
    }
}
31
n8tr

Tâche facile en utilisant stringByReplacingOccurrencesOfString

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

Cela peut vous aider si vous rencontrez \u00a0 au lieu de (espaces). J'ai eu ce problème lorsque j'essayais d'extraire des numéros de téléphone de contacts de périphériques. J'avais besoin de modifier la chaîne phoneNumber afin qu'elle ne contienne aucun espace.

NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

Quand yourString était le numéro de téléphone actuel.

5
dvp.petrov

Utilisez ci-dessous marco et supprimez l'espace.

#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

dans un autre fichier, appelez TRIM:

    NSString *strEmail;
    strEmail = TRIM(@"     this is the test.");

Puisse cela vous aider ...

- (NSString *)removeWhitespaces {
  return [[self componentsSeparatedByCharactersInSet:
                    [NSCharacterSet whitespaceCharacterSet]]
      componentsJoinedByString:@""];
}
2
Aqib Mumtaz

stringByReplacingOcurrencesOfString remplacera tous les espaces avec dans la chaîne non seulement le début et la fin

Utilisation

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]
2
Siva Murugan

Ceci est pour moi le meilleur moyen Swift

        let myString = "  ciao   \n              ciao     "
        var finalString = myString as NSString

        for character in myString{
        if character == " "{

            finalString = finalString.stringByReplacingOccurrencesOfString(" ", withString: "")

        }else{
            finalString = finalString.stringByReplacingOccurrencesOfString("\n", withString: "")

        }

    }
     println(finalString)

et le résultat est: ciaociao

Mais le truc c'est ça!

 extension String {

    var NoWhiteSpace : String {

    var miaStringa = self as NSString

    if miaStringa.containsString(" "){

      miaStringa =  miaStringa.stringByReplacingOccurrencesOfString(" ", withString: "")
    }
        return miaStringa as String

    }
}

let myString = "Ciao   Ciao       Ciao".NoWhiteSpace  //CiaoCiaoCiao
2
RobertoL

C’est pour supprimer tout espace lorsque vous obtenez du texte d’un champ de texte, mais si vous voulez supprimer de l’espace entre les chaînes, vous pouvez utiliser

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

Il remplacera l’espace vide par un espace vide et le champ vide est traité selon la méthode ci-dessous:

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
1
anand madhav