簡體   English   中英

如何測試 Objective-C 中的字符串是否為空?

[英]How do I test if a string is empty in Objective-C?

如何測試 Objective-C 中的NSString是否為空?

您可以檢查是否[string length] == 0 這將檢查它是否是一個有效但為空的字符串 (@"") 以及它是否為 nil,因為在 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);
}

第一種方法是有效的,但如果您的字符串有空格( @" " )則不起作用。 因此,您必須在測試之前清除這些空白區域。

此代碼清除字符串兩側的所有空格:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

一個好主意是創建一個宏,這樣您就不必鍵入以下怪物行:

#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]

現在您可以使用:

NSString *emptyString = @"   ";

if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");

我見過的最好的解決方案之一(比 Matt G 的更好)是我在一些 Git Hub 存儲庫(Wil Shipley 的一個,但我找不到鏈接)上找到的改進的內聯函數:

// Check if the "thing" passed 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) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end

另一種選擇是使用isEqualToString:檢查它是否等於@"" isEqualToString:像這樣:

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}

我把這個:

@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

問題是如果 self 為零,則永遠不會調用此函數。 它會返回 false,這是我們想要的。

只需將您的字符串傳遞給以下方法:

+(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;
}

可能這個答案是已經給出答案的重復,但我在檢查條件的順序上做了很少的修改和更改。 請參考以下代碼:

+(BOOL)isStringEmpty:(NSString *)str {
     if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
            return YES;
       }
      return NO;
  }

迅捷版

盡管這是一個 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 中檢查空字符串?

只需使用if else條件之一,如下所示:

方法一:

if ([yourString isEqualToString:@""]) {
        // yourString is empty.
    } else {
        // yourString has some text on it.
    }

方法二:

if ([yourString length] == 0) {
    // Empty yourString
} else {
    // yourString is not empty
}

您可以使用此方法檢查您的字符串是否為空:

+(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 並添加此方法,以便您只需在整個應用程序中調用它即可使用此方法。

您有兩種方法來檢查字符串是否為空:

假設您的字符串名稱是NSString *strIsEmpty

方法一:

if(strIsEmpty.length==0)
{
    //String is empty
}

else
{
    //String is not empty
}

方法二:

if([strIsEmpty isEqualToString:@""])
{
    //String is empty
}

else
{
    //String is not empty
}

選擇上述任何一種方法並了解字符串是否為空。

只需檢查您的字符串長度

 if (!yourString.length)
 {
   //your code  
 }

給 NIL 的消息將返回 nil 或 0,因此無需測試 nil :)。

快樂編碼...

非常有用的帖子,添加 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);
}

它對我來說很有魅力

如果NSStrings

if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {

    NSLog(@"s is empty");

} else {

    NSLog(@"s containing %@", s);

}

因此,除了檢查字符串長度小於 1 的基本概念之外,深入考慮上下文也很重要。 人類或計算機或其他語言可能對空字符串有不同的定義,並且在這些相同的語言中,額外的上下文可能會進一步改變含義。

假設空字符串表示“在當前上下文中不包含任何重要字符的字符串”。

這可能意味着視覺上,因為顏色和背景顏色在屬性字符串中是相同的。 有效地清空。

這可能意味着沒有有意義的字符。 所有點或所有破折號或所有下划線都可能被視為空。 此外,沒有有意義的重要字符可能意味着字符串沒有讀者可以理解的字符。 它們可以是定義為對讀者毫無意義的語言或字符集中的字符。 我們可以稍微不同地定義它,說字符串在給定的語言中沒有形成已知的單詞。

我們可以說空是渲染字形中負空間百分比的函數。

即使是沒有一般視覺表示的不可打印字符序列也不是真正空的。 控制字符浮現在腦海中。 尤其是低 ASCII 范圍(我很驚訝沒有人提到這些,因為它們包含大量系統並且不是空白,因為它們通常沒有字形和視覺指標)。 然而字符串長度不為零。

結論。 長度本身並不是這里的唯一衡量標准。 上下文集成員資格也非常重要。

字符集成員資格是一個非常重要的常見附加措施。 有意義的序列也是一個相當普遍的序列。 (想想 SETI 或加密或驗證碼)還存在其他更抽象的上下文集。

因此,在根據長度或空格假設字符串僅為空之前,請仔細考慮。

- (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;
}

最好的方法是使用類別。
您可以檢查以下功能。 哪有所有的條件可以檢查。

-(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;
    }

在任何情況下最好的方法是檢查給定字符串的長度。為此,如果您的字符串是 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");
}

希望這會有所幫助。

您可以使用以下方法輕松檢查字符串是否為空:

if ([yourstring isEqualToString:@""]) {
    // execute your action here if string is empty
}

我使用以下代碼檢查了一個空字符串:

//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;
}

您可以通過兩種方式獲得空字符串:

1) @"" // 不包含空格

2) @" " // 包含空格

從技術上講,兩個字符串都是空的。 我們可以通過使用ONE Condition 來寫這兩件事

if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}

嘗試以下

NSString *stringToCheck = @"";

if ([stringToCheck isEqualToString:@""])
{
   NSLog(@"String Empty");
}
else
{
   NSLog(@"String Not Empty");
}

基於多個答案,我創建了一個結合@iDevAmit 和@user238824 答案的即用型類別。

具體按以下順序進行

  1. 檢查 null/nil
  2. 使用它的長度計數檢查字符串是否為空。
  3. 檢查字符串是否為空格。

Header

//
//  NSString+Empty.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSString (Empty)
- (BOOL)isEmptyOrWhiteSpacesOrNil;
@end

NS_ASSUME_NONNULL_END

執行

//
//  NSString+Empty.m

#import "NSString+Empty.h"

@implementation NSString (Empty)

- (BOOL) isWhitespace{
      return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
  }

- (BOOL)isEmptyOrWhiteSpacesOrNil {
     if(self == nil || [self isKindOfClass:[NSNull class]] || self.length==0 || [self isWhitespace] == YES) {
            return YES;
       }
      return NO;
  }

@end

/*
 Credits
 1. https://stackoverflow.com/a/24506942/7551807
 2. https://stackoverflow.com/a/1963273/7551807
 */

用法:當然,如果您的字符串是 null,則永遠不會觸發 function。第一種情況只是為了額外的安全性。 我建議在嘗試使用此方法之前檢查可空性。

if (myString) {
  if [myString isEmptyOrWhiteSpacesOrNil] {
     // String is empty
  }
} else {
// String is null
}
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)];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM