web-dev-qa-db-ja.com

Objective-Cで文字列が空かどうかをどうやってテストするのですか?

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

628
Jamey McElveen

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

1119

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

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);
}
126
Matt G

最初の方法は有効ですが、文字列に空白が含まれていると機能しません(@" ")。そのため、テストする前にこの空白をクリアする必要があります。

このコードは、文字列の両側にあるすべての空白スペースを消去します。

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

1つの良い考えは1つのマクロを作成することです、従ってあなたはこのモンスターラインをタイプする必要はありません:

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

今すぐ使用することができます:

NSString *emptyString = @"   ";

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

私が今まで見た中で最も優れた解決策の1つ(Matt 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);
}
30
Rob

あなたはこのカテゴリーを使うべきです:

@implementation NSString (Empty)

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

@end
16
user238824

以下のメソッドに文字列を渡すだけです:

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

別の選択肢は、それが@""isEqualToString:と等しいかどうかをチェックすることです。

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

私はこれを置く:

@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が返されますが、これは望ましいことです。

11
user4951

迅速なバージョン

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

let myNSString: NSString = ""

if myNSString.length == 0 {
    print("String is empty.")
}

NSStringがOptionalの場合

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で空の文字列をチェックしますか?

6
Suragch

以下のようにifelse条件のうちの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
}
6
Samir Jwarchan

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

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

あなたはこのメソッドを使ってあなたの文字列が空か私ではないかをチェックすることができます:

+(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を宣言し、このメソッドを広告に追加することです。そうすれば、アプリケーションから呼び出してこのメ​​ソッドを使用できるようになります。

4
Fatima Arshad

文字列が空かどうかを確認する方法は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
}

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

4
Aditya

文字列の長さを確認する

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

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

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

3
Aks

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);
}
3
Zeev Vax
- (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;
}
2
Ptbaileys

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

NSStringsの場合

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

    NSLog(@"s is empty");

} else {

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

}
2
Salim

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

空文字列とは、「現在の文脈で重要な文字を含まない文字列」を意味します。

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

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

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

一般的な視覚的表現がない一連の印刷不可能な文字でも、真に空ではありません。コントロールキャラクターが頭に浮かぶ。特に低いASCII範囲(それらが多くのシステムを駆り立て、通常グリフや視覚的な測定基準を持たないので空白ではないので、私は誰もそれらを言及しませんでした)。それでも文字列の長さはゼロではありません。

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

キャラクタセットのメンバーシップは、非常に重要な一般的な追加の測定方法です。意味のあるシーケンスもかなり一般的なものです。 (SETI、暗号、またはキャプチャと考えてください)さらに抽象的なコンテクストセットもあります。

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

2
uchuugaka

最善の方法はカテゴリを使用することです。
以下の機能を確認できます。どの条件を確認する必要があります。

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

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

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

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

1
Ahsan Ebrahim
if (string.length == 0) stringIsEmpty;
1
InvertedHeli

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

//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"];  
}
1

これをチェックして :

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

または

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

これが役立つことを願っています。

1
Mayur

どのような場合でも最善の方法は、与えられた文字列の長さをチェックすることです。あなたの文字列がmyStringの場合、これはコードは次のようになります。

    int len = [myString length];
    if(len == 0){
       NSLog(@"String is empty");
    }
    else{
      NSLog(@"String is : %@", myString);
    }
1
AJS
//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
Rohit Kashyap
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
    NSLog(@"String is empty");
}
else{
    NSLog(@"String is not empty");
}    
0
C_compnay

以下を試してください

NSString *stringToCheck = @"";

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

2つの方法で空の文字列を持つことができます。

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

2)@ "" //スペースを含める

技術的には両方の文字列は空です。 _ one _ Conditionを使うだけで両方を書くことができます

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