Objective-CでNSString
が空かどうかをテストするにはどうすればよいですか?
[string length] == 0
かどうか確認できます。 nilでlength
を呼び出しても0が返されるため、これは有効で空の文字列(@ "")であるかどうか、およびnilであるかどうかを確認します。
マークの答えは正しいです。しかし、私はこの機会に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);
}
最初の方法は有効ですが、文字列に空白が含まれていると機能しません(@" "
)。そのため、テストする前にこの空白をクリアする必要があります。
このコードは、文字列の両側にあるすべての空白スペースを消去します。
[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);
}
あなたはこのカテゴリーを使うべきです:
@implementation NSString (Empty)
- (BOOL) isWhitespace{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
以下のメソッドに文字列を渡すだけです:
+(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;
}
別の選択肢は、それが@""
で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が返されますが、これは望ましいことです。
これは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.")
}
以下のように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)isStringEmpty:(NSString *)str
{
if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
return YES;
}
return NO;
}
あなたはこのメソッドを使ってあなたの文字列が空か私ではないかをチェックすることができます:
+(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);
}
- (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;
}
それは私にとって魅力として働いています
NSString
がs
の場合
if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {
NSLog(@"s is empty");
} else {
NSLog(@"s containing %@", s);
}
したがって、1未満の文字列長をチェックするという基本概念とは別に、コンテキストを深く検討することが重要です。人間やコンピュータ、あるいは他の言語は、空の文字列の定義が異なる場合があり、それらの同じ言語内では、追加のコンテキストによって意味がさらに変わる可能性があります。
空文字列とは、「現在の文脈で重要な文字を含まない文字列」を意味します。
属性付き文字列では色と背景色が同じであるため、これは視覚的に意味を持つ可能性があります。事実上空です。
これは意味のある文字がないことを意味します。すべてのドット、すべてのダッシュ、またはすべてのアンダースコアは空と見なされます。さらに、意味のある重要な文字がないということは、読者が理解できる文字がない文字列を意味する可能性があります。それらは、読者にとって無意味なものとして定義された言語またはcharacterSet内の文字です。文字列が特定の言語で既知の単語を形成しないと言うことは、少し違った定義にすることができます。
空は、レンダリングされたグリフ内の負のスペースの割合の関数であると言えます。
一般的な視覚的表現がない一連の印刷不可能な文字でも、真に空ではありません。コントロールキャラクターが頭に浮かぶ。特に低いASCII範囲(それらが多くのシステムを駆り立て、通常グリフや視覚的な測定基準を持たないので空白ではないので、私は誰もそれらを言及しませんでした)。それでも文字列の長さはゼロではありません。
結論。長さだけがここでの唯一の尺度ではありません。コンテキストセットメンバーシップも非常に重要です。
キャラクタセットのメンバーシップは、非常に重要な一般的な追加の測定方法です。意味のあるシーケンスもかなり一般的なものです。 (SETI、暗号、またはキャプチャと考えてください)さらに抽象的なコンテクストセットもあります。
そのため、文字列が長さまたは空白に基づいて空になると想定する前に、慎重に検討してください。
最善の方法はカテゴリを使用することです。
以下の機能を確認できます。どの条件を確認する必要があります。
-(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;
}
これで文字列が空かどうか簡単に確認できます。
if ([yourstring isEqualToString:@""]) {
// execute your action here if string is empty
}
if([myString isEqual:@""])
やif([myString isEqualToString:@""])
と同じくらい簡単
if (string.length == 0) stringIsEmpty;
以下のコードを使って空の文字列をチェックしました。
//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 ([yourString isEqualToString:@""])
{
NsLog(@"Blank String");
}
または
if ([yourString length] == 0)
{
NsLog(@"Blank String");
}
これが役立つことを願っています。
どのような場合でも最善の方法は、与えられた文字列の長さをチェックすることです。あなたの文字列がmyStringの場合、これはコードは次のようになります。
int len = [myString length];
if(len == 0){
NSLog(@"String is empty");
}
else{
NSLog(@"String is : %@", myString);
}
//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");
}
以下を試してください
NSString *stringToCheck = @"";
if ([stringToCheck isEqualToString:@""])
{
NSLog(@"String Empty");
}
else
{
NSLog(@"String Not Empty");
}
2つの方法で空の文字列を持つことができます。
1)@ "" //スペースを含まない
2)@ "" //スペースを含める
技術的には両方の文字列は空です。 _ one _ Conditionを使うだけで両方を書くことができます
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
NSLog(@"Empty String");
}
else
{
NSLog(@"String contains some value");
}