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?
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.
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);
}
}
Tâche facile en utilisant stringByReplacingOccurrencesOfString
NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
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.
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:@""];
}
stringByReplacingOcurrencesOfString remplacera tous les espaces avec dans la chaîne non seulement le début et la fin
Utilisation
[YourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]
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
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]];