681

NSStringObjective-Cでが空かどうかをテストするにはどうすればよいですか?

4

30 に答える 30

1183

かどうかを確認でき[string length] == 0ます。これにより、有効であるが空の文字列(@ "")であるかどうか、およびnilであるかどうかがチェックされます。これはlength、nilを呼び出すと0が返されるためです。

于 2009-05-22T18:14:04.843 に答える
126

マークの答えは正しいです。isEmptyしかし、私はこの機会に、彼がブログで共有したWilShipleyの一般化されたものへのポインタを含めます。

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);
}
于 2009-05-22T18:33:24.377 に答える
94

最初のアプローチは有効ですが、文字列に空白スペース()がある場合は機能しません@" "。したがって、テストする前にこの空白をクリアする必要があります。

このコードは、文字列の両側のすべての空白スペースをクリアします。

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

1つのマクロを作成することをお勧めします。これにより、次のモンスターラインを入力する必要がなくなります。

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

これで、次を使用できます。

NSString *emptyString = @"   ";

if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
于 2009-10-27T13:37:03.867 に答える
32

私が今まで見た中で最高の解決策の1つ(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);
}
于 2010-09-09T09:54:52.253 に答える
16

このカテゴリをより適切に使用する必要があります。

@implementation NSString (Empty)

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

@end
于 2009-12-26T12:20:00.497 に答える
13

@""別のオプションは、次のisEqualToString:ように等しいかどうかを確認することです。

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}
于 2011-11-27T03:45:48.170 に答える
12

私はこれを置きます:

@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がnilの場合、この関数が呼び出されないことです。falseが返されますが、これは望ましいことです。

于 2011-06-02T07:30:36.610 に答える
11

文字列を次のメソッドに渡すだけです。

+(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;
}
于 2014-02-03T10:52:02.133 に答える
8

この答えはすでに与えられた答えの複製かもしれませんが、私は条件をチェックする順序でいくつかの変更と変更を行いました。以下のコードを参照してください。

+(BOOL)isStringEmpty:(NSString *)str {
     if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
            return YES;
       }
      return NO;
  }
于 2014-07-01T09:34:35.637 に答える
7

Swiftバージョン

これはObjectiveCの質問ですがNSString、Swiftで使用する必要があったので、ここにも回答を含めます。

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.")
    }
}

通常のSwiftStringバージョンは

let myString: String = ""

if myString.isEmpty {
    print("String is empty.")
}

参照:Swiftで空の文字列を確認しますか?

于 2015-07-09T19:59:17.653 に答える
6

if else以下に示す条件の1つを使用してください。

方法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
}
于 2012-08-01T10:11:18.477 に答える
4

この方法を使用して、文字列が空であるかどうかを確認できます。

+(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と言ってこのメソッドを追加し、アプリケーション全体で呼び出すだけでこのメソッドを使用できるようにすることです。

于 2014-09-24T18:12:03.350 に答える
4

文字列が空かどうかを確認する方法は2つあります。

文字列名が。であるとしましょう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
}

上記の方法のいずれかを選択して、文字列が空かどうかを確認してください。

于 2014-11-17T08:00:39.613 に答える
4

文字列の長さを確認するだけです

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

NILへのメッセージはnilまたは0を返すので、nilをテストする必要はありません:)。

ハッピーコーディング..。

于 2016-05-27T19:58:46.713 に答える
2

NSDictionaryサポートと1つの小さな変更を追加するための非常に便利な投稿

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);
}
于 2012-09-15T19:17:10.297 に答える
2

それは私にとって魅力として働いています

NSStringの場合s

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

    NSLog(@"s is empty");

} else {

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

}
于 2013-09-30T11:33:53.570 に答える
2

したがって、1未満の文字列長をチェックするという基本的な概念は別として、コンテキストを深く考慮することが重要です。人間やコンピューターなどの言語では、空の文字列の定義が異なる場合があり、それらの同じ言語内で、追加のコンテキストによって意味がさらに変わる場合があります。

空の文字列が「現在のコンテキストで重要な文字を含まない文字列」を意味するとします。

これは、属性付き文字列の色と背景色が同じであるため、視覚的に意味する場合があります。事実上空です。

これは、意味のある文字が空であることを意味する場合があります。すべてのドットまたはすべてのダッシュまたはすべての下線は、空と見なされる場合があります。さらに、意味のある重要な文字が空の場合は、読者が理解できる文字がない文字列を意味する可能性があります。それらは、読者にとって無意味であると定義された言語またはcharacterSetの文字である可能性があります。文字列が特定の言語で既知の単語を形成しないと言うことは、少し異なる方法で定義できます。

空は、レンダリングされたグリフの負のスペースのパーセンテージの関数であると言えます。

一般的な視覚的表現のない印刷不可能な文字のシーケンスでさえ、真に空ではありません。制御文字が思い浮かびます。特にASCII範囲が低い(多くのシステムをホースで接続し、通常はグリフや視覚的なメトリックがないため空白ではないため、誰もそれらについて言及していないことに驚いています)。しかし、文字列の長さはゼロではありません。

結論。ここでの測定値は長さだけではありません。コンテキストセットのメンバーシップも非常に重要です。

文字セットのメンバーシップは、非常に重要な一般的な追加の手段です。意味のあるシーケンスもかなり一般的なものです。(SETIまたはcryptoまたはcaptchasと考えてください)追加のより抽象的なコンテキストセットも存在します。

したがって、文字列が長さまたは空白に基づいて空であると想定する前に、慎重に検討してください。

于 2014-03-25T14:06:07.920 に答える
2
- (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;
}
于 2015-07-09T21:18:17.823 に答える
2

最良の方法は、カテゴリを使用することです。
以下の機能を確認できます。チェックするすべての条件があります。

-(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;
    }
于 2015-11-24T08:31:18.200 に答える
1

いずれの場合も、指定された文字列の長さを確認するのが最善の方法です。このため、文字列がmyStringの場合、コードは次のようになります。

    int len = [myString length];
    if(len == 0){
       NSLog(@"String is empty");
    }
    else{
      NSLog(@"String is : %@", myString);
    }
于 2012-06-27T12:17:20.403 に答える
1
if (string.length == 0) stringIsEmpty;
于 2013-10-04T08:33:43.277 に答える
1

これをチェックして :

if ([yourString isEqualToString:@""])
{
    NsLog(@"Blank String");
}

または

if ([yourString length] == 0)
{
    NsLog(@"Blank String");
}

これがお役に立てば幸いです。

于 2014-03-25T13:20:13.773 に答える
1

これにより、文字列が空かどうかを簡単に確認できます。

if ([yourstring isEqualToString:@""]) {
    // execute your action here if string is empty
}
于 2014-04-14T07:29:16.340 に答える
1

以下のコードを使用して空の文字列をチェックしました:

//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"];  
}
于 2014-09-30T12:46:32.817 に答える
1

if([myString isEqual:@""])またはと同じくらい簡単if([myString isEqualToString:@""])

于 2015-03-30T10:39:05.670 に答える
1
//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;
}
于 2017-01-02T16:25:25.923 に答える
0

空の文字列は、次の2つの方法で使用できます。

1)@""//スペースを含まない

2)@""//スペースを含む

技術的には、両方の文字列は空です。1つの条件使用するだけで両方を書くことができます

if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}
于 2018-02-02T10:31:35.403 に答える
0

次を試してください

NSString *stringToCheck = @"";

if ([stringToCheck isEqualToString:@""])
{
   NSLog(@"String Empty");
}
else
{
   NSLog(@"String Not Empty");
}
于 2018-09-20T21:01:48.730 に答える
-1
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
    NSLog(@"String is empty");
}
else{
    NSLog(@"String is not empty");
}    
于 2014-09-18T11:34:49.587 に答える
-2
if( [txtMobile.text length] == 0 )
{
    [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
于 2013-10-24T11:24:55.463 に答える