我想检查一个特定的字符串是否只是由空格组成。它可以是任意数量的空格,包括零。什么是最好的方式来确定?检查一个NSString是否只是由空格构成
回答
NSString *str = @" ";
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
if ([[str stringByTrimmingCharactersInSet: set] length] == 0)
{
// String contains only whitespace.
}
修整空间并检查剩余字符的数量。看看这个帖子here
尝试剥离它的空间,并将其与@ “”:
NSString *probablyEmpty = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
BOOL wereOnlySpaces = [probablyEmpty isEqualToString:@""];
试试这个:
[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
或
[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
这是一个'NSMutableString'方法。 –
恩,不,它不是。它返回一个新的NSString并在NSString.h中声明。 – picciano
其实它并没有在任何地方定义。 –
这里是基于@Alexander Akers的答案的NSString
上的一个易于重用的类别,但这也是返回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
下面是一个简单的迅捷解决方案:
//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
}
为什么投了票? – Esqarrouth
下面是相同的雨燕版本代码,
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
}
或者你可以写一个简单的字符串扩展如下图所示,并使用相同的代码与在多个位置更好的可读性。
extension String {
func isEmptyOrContainsOnlySpaces() -> Bool {
return count(self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0
}
}
,只是把它用这样的任意字符串,
var str1 = " "
if str.isEmptyOrContainsOnlySpaces() {
// custom code e.g Show an alert
}
这是显著快检查的非空格字符,而不是微调整个字符串的范围。
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
测试在我的iPhone 6+上运行。 代码here。粘贴到任何XCTestCase子类中。
这个答案是迄今为止最好的。我真的很惊讶,有那么多人盲目地去修剪解决方案。你应该修正一个拼写错误:如果range.location!= NSNotFound,这意味着你已经找到了非WS字符,这意味着字符串不是空的。所以你需要反转条件。 – battlmonstr
不得不使用雨燕3验证码:
func isEmptyOrContainsOnlySpaces() -> Bool {
return self.trimmingCharacters(in: .whitespaces).characters.count == 0
}
我真的很惊讶,我是第一个谁提出正则表达式
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;
还是在斯威夫特:
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
- 1. 什么是防弹方法来检查NSString是否为空/空?
- 2. 如何检查URL是否只包含一个路由参数?
- 3. 检查一个nsstring是否与另一个字符串匹配
- 4. 检查一个NSMutableDictionary是否为空?
- 5. 检查一个对象是否为空
- 6. 检查一个表是否为空
- 7. NSSet touchesShouldBegin:UIScrollView只是一个NSString
- 8. 一个解决方案检查每个表格是否为空
- 9. 如何检测NSString是否为空?
- 10. 检测字符串是否由空格组成?
- 11. 检查结构是否为空:Javascript
- 12. 正则表达式来检查一个字符串是否只有空格
- 13. Java - 是否有任何理由检查单例是否为空?
- 14. getline检查行是否为空格
- 15. 检查字符串中是否只有空格
- 16. 检查文件是否只包含空格C++
- 17. VSTO c#检查一个单元格是否为空
- 18. 可以检查NSData是否包含NSString
- 19. 如何检查NSString是否包含'%'?
- 20. 检查一个字符串是否都是唯一的字符,空格除外
- 21. 检查NSString实例是否包含在一个NSArray中
- 22. 检查一个单词后面是否有单词(NSSTRING)
- 23. 检查NSString的最后一个字符是否为数字
- 24. 检查文本“ABC”是存在的,应该只由数字开头且成功了,后面有一个空格
- 25. C++:如何检查输入是否只是一个int?
- 26. 检测NSString是否包含...?
- 27. 检查JTextField是否为空
- 28. 检查stderr是否为空
- 29. 检查NumericUpDown是否为空
- 30. laravel检查是否为空
取决于情况,人们可能想使用'whitespaceAndNelinelineCharacterSet'来代替(exa只是它在锡上所说的)。 – BoltClock