49 votes

Vérifiez si un NSString est simplement composé d'espaces

Je veux vérifier si une chaîne particulière n'est constituée que d'espaces. Il peut s'agir de n'importe quel nombre d'espaces, y compris zéro. Quelle est la meilleure façon de le déterminer?

107voto

Alexsander Akers Points 9635
NSString *str = @"         ";
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
if ([[str stringByTrimmingCharactersInSet: set] length] == 0)
{
    // String contains only whitespace.
}

9voto

arsenius Points 536

Il est beaucoup plus rapide de vérifier la plage de caractères non blancs au lieu de couper la chaîne entière.

 NSCharacterSet *inverted = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet];
NSRange range = [string rangeOfCharacterFromSet:inverted];
BOOL empty = (range.location == NSNotFound);

Notez que "rempli" est probablement le cas le plus courant avec un mélange d'espaces et de texte.

 testSpeedOfSearchFilled - 0.012 sec
testSpeedOfTrimFilled - 0.475 sec
testSpeedOfSearchEmpty - 1.794 sec
testSpeedOfTrimEmpty - 3.032 sec

Les tests sont exécutés sur mon iPhone 6+. Codez ici . Collez dans n'importe quelle sous-classe XCTestCase.

9voto

Eimantas Points 29052

Essayez de le supprimer des espaces et de le comparer à @"":

 NSString *probablyEmpty = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
BOOL wereOnlySpaces = [probablyEmpty isEqualToString:@""];

2voto

picciano Points 5638

Essaye ça:

 [mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

ou

 [mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

2voto

vadian Points 29149

Je suis vraiment surpris d'être le premier à suggérer l' expression régulière

 NSString *string = @"         ";
NSString *pattern = @"^\\s*$";
NSRegularExpression *expression = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
NSArray *matches = [expression matchesInString:string options:0 range:NSMakeRange(0, string.length)];
BOOL isOnlyWhitespace = matches.count;

Ou en Swift :

 let string = "         "
let pattern = "^\\s*$"
let expression = try! NSRegularExpression(pattern:pattern)
let matches = expression.matches(in: string, range: NSRange(string.startIndex..., in: string))
let isOnlyWhitespace = !matches.isEmpty

Alternativement

 let string = "         "
let isOnlyWhitespace = string.range(of: "^\\s*$", options: .regularExpression) != nil

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