NSString
Objective-Cでが空かどうかをテストするにはどうすればよいですか?
30 に答える
かどうかを確認でき[string length] == 0
ます。これにより、有効であるが空の文字列(@ "")であるかどうか、およびnilであるかどうかがチェックされます。これはlength
、nilを呼び出すと0が返されるためです。
マークの答えは正しいです。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);
}
最初のアプローチは有効ですが、文字列に空白スペース()がある場合は機能しません@" "
。したがって、テストする前にこの空白をクリアする必要があります。
このコードは、文字列の両側のすべての空白スペースをクリアします。
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
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" 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:
ように等しいかどうかを確認することです。
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がnilの場合、この関数が呼び出されないことです。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;
}
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.")
}
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
}
この方法を使用して、文字列が空であるかどうかを確認できます。
+(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と言ってこのメソッドを追加し、アプリケーション全体で呼び出すだけでこのメソッドを使用できるようにすることです。
文字列が空かどうかを確認する方法は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
}
上記の方法のいずれかを選択して、文字列が空かどうかを確認してください。
文字列の長さを確認するだけです
if (!yourString.length)
{
//your code
}
NILへのメッセージはnilまたは0を返すので、nilをテストする必要はありません:)。
ハッピーコーディング..。
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);
}
それは私にとって魅力として働いています
NSString
の場合s
if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {
NSLog(@"s is empty");
} else {
NSLog(@"s containing %@", s);
}
したがって、1未満の文字列長をチェックするという基本的な概念は別として、コンテキストを深く考慮することが重要です。人間やコンピューターなどの言語では、空の文字列の定義が異なる場合があり、それらの同じ言語内で、追加のコンテキストによって意味がさらに変わる場合があります。
空の文字列が「現在のコンテキストで重要な文字を含まない文字列」を意味するとします。
これは、属性付き文字列の色と背景色が同じであるため、視覚的に意味する場合があります。事実上空です。
これは、意味のある文字が空であることを意味する場合があります。すべてのドットまたはすべてのダッシュまたはすべての下線は、空と見なされる場合があります。さらに、意味のある重要な文字が空の場合は、読者が理解できる文字がない文字列を意味する可能性があります。それらは、読者にとって無意味であると定義された言語またはcharacterSetの文字である可能性があります。文字列が特定の言語で既知の単語を形成しないと言うことは、少し異なる方法で定義できます。
空は、レンダリングされたグリフの負のスペースのパーセンテージの関数であると言えます。
一般的な視覚的表現のない印刷不可能な文字のシーケンスでさえ、真に空ではありません。制御文字が思い浮かびます。特にASCII範囲が低い(多くのシステムをホースで接続し、通常はグリフや視覚的なメトリックがないため空白ではないため、誰もそれらについて言及していないことに驚いています)。しかし、文字列の長さはゼロではありません。
結論。ここでの測定値は長さだけではありません。コンテキストセットのメンバーシップも非常に重要です。
文字セットのメンバーシップは、非常に重要な一般的な追加の手段です。意味のあるシーケンスもかなり一般的なものです。(SETIまたはcryptoまたはcaptchasと考えてください)追加のより抽象的なコンテキストセットも存在します。
したがって、文字列が長さまたは空白に基づいて空であると想定する前に、慎重に検討してください。
- (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;
}
空の文字列は、次の2つの方法で使用できます。
1)@""//スペースを含まない
2)@""//スペースを含む
技術的には、両方の文字列は空です。1つの条件を使用するだけで両方を書くことができます
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");
}
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)];
}