如何testingObjective C中的string是否为空?
如何testingObjective C中的NSString
是否为空?
你可以检查是否[string length] == 0
。 这将检查它是否是一个有效的空string(@“”)以及是否为零,因为在nil上的调用length
也将返回0。
马克的回答是正确的。 但是我将借此机会给Wil Shipley的广义的isEmpty
一个指针,他在他的博客上分享了这个指令 :
static inline BOOL IsEmpty(id thing) { return thing == nil || ([thing respondsToSelector:@selector(length)] && [(NSData *)thing length] == 0) || ([thing respondsToSelector:@selector(count)] && [(NSArray *)thing count] == 0); }
第一种方法是有效的,但是如果你的string有空格( @" "
)则不起作用。 所以你必须在testing之前清除这个空白区域。
此代码清除string两边的所有空格:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
一个好主意是创build一个macros,所以你不必input这个怪物线:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
现在你可以使用:
NSString *emptyString = @" "; if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
我见过的最好的解决scheme之一(比马特G的更好)是我在一些Git Hub回购(Wil Shipley的回购,但我找不到链接)中改进的内联函数:
// Check if the "thing" pass'd is empty static inline BOOL isEmpty(id thing) { return thing == nil || [thing isKindOfClass:[NSNull class]] || ([thing respondsToSelector:@selector(length)] && [(NSData *)thing length] == 0) || ([thing respondsToSelector:@selector(count)] && [(NSArray *)thing count] == 0); }
你应该更好地使用这个类别:
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0); } @end
我把这个:
@implementation NSObject (AdditionalMethod) -(BOOL) isNotEmpty { return !(self == nil || [self isKindOfClass:[NSNull class]] || ([self respondsToSelector:@selector(length)] && [(NSData *)self length] == 0) || ([self respondsToSelector:@selector(count)] && [(NSArray *)self count] == 0)); }; @end
问题是,如果自己是零,这个function永远不会被调用。 它会返回false,这是所需的。
只要把你的string传给下面的方法:
+(BOOL)isEmpty:(NSString *)str { if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@"<null>"]){ return YES; } return NO; }
另一个select是检查它是否等于@""
与isEqualToString:
像这样:
if ([myString isEqualToString:@""]) { NSLog(@"myString IS empty!"); } else { NSLog(@"myString IS NOT empty, it is: %@", myString); }
你有两种方法来检查string是否为空:
假设您的string名称是NSString *strIsEmpty
。
方法1:
if(strIsEmpty.length==0) { //String is empty } else { //String is not empty }
方法2:
if([strIsEmpty isEqualToString:@""]) { //String is empty } else { //String is not empty }
select上述任何一种方法,并知道string是否为空。
只要使用其中一个条件,如下所示:
方法1:
if ([yourString isEqualToString:@""]) { // yourString is empty. } else { // yourString has some text on it. }
方法2:
if ([yourString length] == 0) { // Empty yourString } else { // yourString is not empty }
Swift版本
即使这是一个Objective C的问题,我需要在Swift中使用NSString
,所以我也会在这里包含一个答案。
let myNSString: NSString = "" if myNSString.length == 0 { print("String is empty.") }
或者如果NSString
是一个可选的:
var myOptionalNSString: NSString? = nil if myOptionalNSString == nil || myOptionalNSString!.length == 0 { print("String is empty.") } // or alternatively... if let myString = myOptionalNSString { if myString.length != 0 { print("String is not empty.") } }
正常的Swift String
版本是
let myString: String = "" if myString.isEmpty { print("String is empty.") }
请参阅: 检查Swift中的空string?
你可以检查你的string是否为空或不使用此方法:
+(BOOL) isEmptyString : (NSString *)string { if([string length] == 0 || [string isKindOfClass:[NSNull class]] || [string isEqualToString:@""]||[string isEqualToString:NULL] || string == nil) { return YES; //IF String Is An Empty String } return NO; }
最好的做法是让一个共享类声明UtilityClass并且使用这个方法,这样你就可以通过在应用程序中调用它来使用这个方法。
非常有用的文章,添加NSDictionary支持以及一个小的变化
static inline BOOL isEmpty(id thing) { return thing == nil || [thing isKindOfClass:[NSNull class]] || ([thing respondsToSelector:@selector(length)] && ![thing respondsToSelector:@selector(count)] && [(NSData *)thing length] == 0) || ([thing respondsToSelector:@selector(count)] && [thing count] == 0); }
可能是这个答案是已经给出的答案的副本,但我没有做一些修改和检查条件的顺序的变化。 请参考下面的代码:
+(BOOL)isStringEmpty:(NSString *)str { if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) { return YES; } return NO; }
简单检查你的string长度
if (!yourString.length) { //your code }
给NIL的消息将返回零或0,所以不需要testing零:)。
快乐编码…
它是为我的魅力工作
如果NSString
是s
if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) { NSLog(@"s is empty"); } else { NSLog(@"s containing %@", s); }
因此,除了检查string长度小于1的基本概念之外,深入考虑上下文很重要。 语言人类或计算机或其他可能有不同的空string的定义,并在这些相同的语言,额外的上下文可能会进一步改变意义。
假设空string表示“在当前上下文中不包含任何重要字符的string”。
这可能意味着视觉上,因为在颜色和背景颜色相同的属性string。 有效地清空。
这可能意味着空的有意义的人物。 所有点或所有破折号或所有下划线可能被认为是空的。 而且,清除有意义的重要字符可能意味着没有读者理解的字符的string。 他们可能是一个语言或字符集的字符集定义为读者毫无意义。 我们可以定义它有点不同,说string形成给定的语言没有已知的单词。
我们可以说空白是呈现的字形中负空间的百分比的函数。
即使是没有一般视觉performance的不可打印字符序列也不是真正的空白。 控制字符浮现在脑海中。 特别是低的ASCII范围(我很惊讶没有人提到这些,因为他们软pipe很多系统,而不是空格,因为他们通常没有字形和没有视觉指标)。 然而,string长度不是零。
结论。 长度本身并不是唯一的措施。 上下文集合成员资格也非常重要。
字符集成员是一个非常重要的常见附加措施。 有意义的序列也是一个相当普遍的序列。 (认为SETI或encryption或validation码)另外还有更多的抽象上下文集。
所以在设想一个string只是基于长度或空白的空白之前仔细想一想。
- (BOOL)isEmpty:(NSString *)string{ if ((NSNull *) string == [NSNull null]) { return YES; } if (string == nil) { return YES; } if ([string length] == 0) { return YES; } if ([[string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) { return YES; } if([[string stringByStrippingWhitespace] isEqualToString:@""]){ return YES; } return NO; }
最好的方法是使用该类别。
您可以检查以下function。 其中有所有的条件来检查。
-(BOOL)isNullString:(NSString *)aStr{ if([(NSNull *)aStr isKindOfClass:[NSNull class]]){ return YES; } if ((NSNull *)aStr == [NSNull null]) { return YES; } if ([aStr isKindOfClass:[NSNull class]]){ return YES; } if(![[aStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]){ return YES; } return NO; }
在任何情况下,最好的办法是检查给定的string的长度。如果你的string是myString,那么代码是:
int len = [myString length]; if(len == 0){ NSLog(@"String is empty"); } else{ NSLog(@"String is : %@", myString); }
if (string.length == 0) stringIsEmpty;
检查这个:
if ([yourString isEqualToString:@""]) { NsLog(@"Blank String"); }
要么
if ([yourString length] == 0) { NsLog(@"Blank String"); }
希望这会有所帮助。
你可以很容易地检查string是否为空:
if ([yourstring isEqualToString:@""]) { // execute your action here if string is empty }
我使用下面的代码检查了一个空string:
//Check if we have any search terms in the search dictionary. if( (strMyString.text==(id) [NSNull null] || [strMyString.text length]==0 || strMyString.text isEqual:@"")) { [AlertView showAlert:@"Please enter a valid string"]; }
它就像if([myString isEqual:@""])
或if([myString isEqualToString:@""])
//Different validations: NSString * inputStr = @"Hey "; //Check length [inputStr length] //Coming from server, check if its NSNull [inputStr isEqual:[NSNull null]] ? nil : inputStr //For validation in allowed character set -(BOOL)validateString:(NSString*)inputStr { BOOL isValid = NO; if(!([inputStr length]>0)) { return isValid; } NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@".-"]; [allowedSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]; if ([inputStr rangeOfCharacterFromSet:[allowedSet invertedSet]].location == NSNotFound) { // contains only decimal set and '-' and '.' } else { // invalid isValid = NO; } return isValid; }
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){ NSLog(@"String is empty"); } else{ NSLog(@"String is not empty"); }
if( [txtMobile.text length] == 0 ) { [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)]; }