检查一个NSString是否只是空格

我想检查一个特定的string是否由空格组成。 它可以是任意数量的空格,包括零。 什么是确定的最好方法?

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

尝试剥离它的空间,并将其与@“”进行比较:

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

检查非空白字符的范围而不是修剪整个string的速度要快得多。

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

请注意,“填充”可能是混合了空格和文本的最常见情况。

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

testing在我的iPhone 6+上运行。 代码在这里 。 粘贴到任何XCTestCase子类中。

尝试这个:

 [mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

要么

 [mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

修剪空间并检查剩余字符的数量。 看看这个post在这里

这里是基于@Alexander Akers的答案的NSString上的一个容易重用的类别,但是如果string中包含“新行”,那么也返回YES

 @interface NSString (WhiteSpaceDetect) @property (readonly) BOOL isOnlyWhitespace; @end @implementation NSString (WhiteSpaceDetect) - (BOOL) isOnlyWhitespace { return ![self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]].length; } @end 

对于那些不信任灵魂的人

 #define WHITE_TEST(x) for (id z in x) printf("\"%s\" : %s\n",[z UTF8String], [z isOnlyWhitespace] ? "YES" :"NO") WHITE_TEST(({ @[ @"Applebottom", @"jeans\n", @"\n", @"" "", @" \ \ ", @" " ];})); 

 "Applebottom" : NO "jeans " : NO " " : YES "" : YES " " : YES " " : YES 

必须使用这个代码Swift 3:

 func isEmptyOrContainsOnlySpaces() -> Bool { return self.trimmingCharacters(in: .whitespaces).characters.count == 0 } 

我真的很惊讶,我是第一个build议正则expression式的人

 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; 

或者在Swift中:

 let string = " " let pattern = "^\\s*$" let expression = try! NSRegularExpression(pattern:pattern, options:[]) let matches = expression.matches(in: string, options: [], range:NSRange(location: 0, length: string.utf16.count)) let isOnlyWhitespace = !matches.isEmpty 

这是一个简单的Swift解决scheme:

 //Check if string contains only empty spaces and new line characters static func isStringEmpty(#text: String) -> Bool { let characterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet() let newText = text.stringByTrimmingCharactersInSet(characterSet) return newText.isEmpty } 

这里是Swift版本的代码,

 var str = "Hello World" if count(str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 { // String is empty or contains only white spaces } else { // String is not empty and contains other characters } 

或者你可以像下面这样编写一个简单的string扩展,并在多个地方使用相同的代码,可读性更好。

 extension String { func isEmptyOrContainsOnlySpaces() -> Bool { return count(self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 } } 

只要用这样的string来调用它,

 var str1 = " " if str.isEmptyOrContainsOnlySpaces() { // custom code eg Show an alert }