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?
Réponses
Trop de publicités?
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.
Eimantas
Points
29052
picciano
Points
5638
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