यदि NSString
उद्देश्य-सी में खाली है तो मैं कैसे परीक्षण कर सकता हूं ?
यदि NSString
उद्देश्य-सी में खाली है तो मैं कैसे परीक्षण कर सकता हूं ?
जवाबों:
अगर आप जाँच कर सकते हैं [string length] == 0
। यह जाँच करेगा कि क्या यह एक वैध लेकिन खाली स्ट्रिंग (@ "") है और साथ ही साथ यह शून्य है, क्योंकि length
शून्य पर कॉल करने से भी 0 वापस आ जाएगा।
ZERO WIDTH SPACE
है नहीं वास्तव में बात है, क्योंकि करता @"\u200B"
है एक चरित्र फिर भी, इसलिए यदि आप स्ट्रिंग खाली होने के लिए परीक्षण, यह कहना होगा कि यह का एक पात्र है, क्योंकि वहाँ नहीं है। यह यूनिकोड मानक का अनुसरण करने योग्य नहीं है।
![string length]
:। अधिक साफ लगता है।
मार्क का जवाब सही है। लेकिन मैं विल् शिप्पी के सामान्यीकरण के लिए एक सूचक को शामिल करने का यह अवसर लूंगा 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);
}
-isNotEmpty
:)
पहला दृष्टिकोण मान्य है, लेकिन अगर आपके स्ट्रिंग में रिक्त स्थान ( @" "
) नहीं है तो यह काम नहीं करता है । इसलिए आपको इसे जांचने से पहले इस सफेद रिक्त स्थान को साफ करना चाहिए।
यह कोड स्ट्रिंग के दोनों तरफ के सभी रिक्त स्थानों को साफ़ करता है:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
एक अच्छा विचार एक मैक्रो का निर्माण करता है, इसलिए आपको यह राक्षस लाइन टाइप करने की आवश्यकता नहीं है:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
अब आप उपयोग कर सकते हैं:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
NSString
श्रेणी द्वारा सेवा की जाए जो कि एक विधि कहलाए, trimmedString
जो वास्तव में आपने लिखी है।
whitespaceCharacterSet
में नईलाइन शामिल नहीं हैं! यहां मैंने एक श्रेणी दी है जिसमें मैंने लिखा है trim
और कुछ अन्य उपयोगी विधियाँ: github.com/alexch/unsuck/blob/master/unsuck/NSString%2Bnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/…
सबसे अच्छा समाधान में से एक जो मैंने कभी देखा (मैट जी के एक से बेहतर) यह बेहतर इनलाइन फ़ंक्शन है जिसे मैंने कुछ जीआईटी हब रेपो (विली शिपली के एक पर उठाया है, लेकिन मुझे लिंक नहीं मिल सकता है):
// 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);
}
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? जल्दी या बाद में, आप पूछ रहे होंगे कि आप किस तरह की कक्षा के साथ काम कर रहे हैं, पहले संदर्भ में इसे करना बेहतर है।
आपको इस श्रेणी का बेहतर उपयोग करना चाहिए:
@implementation NSString (Empty)
- (BOOL) isWhitespace{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); } @end
मार्क के और काइल के उत्तर के संयोजन के रूप में।
मैंने इसे रखा:
@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
समस्या यह है कि यदि आत्म शून्य है, तो यह फ़ंक्शन कभी नहीं कहा जाता है। यह गलत है, जो वांछित है वापस आ जाएगा।
-(BOOL)isEmpty{ return ![self isNotEmpty]}
श्रेणी पर काम नहीं करेगा।
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? जल्दी या बाद में, आप पूछ रहे होंगे कि आप किस तरह की कक्षा के साथ काम कर रहे हैं, पहले संदर्भ में इसे करना बेहतर है।
बस अपनी स्ट्रिंग निम्न विधि से पास करें:
+(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;
}
if
else
नीचे दी गई शर्तों में से एक का उपयोग करें:
विधि 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
}
हालांकि यह एक ऑब्जेक्टिव सी प्रश्न है, मुझे 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.")
}
}
सामान्य स्विफ्ट String
संस्करण है
let myString: String = ""
if myString.isEmpty {
print("String is 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;
}
सबसे अच्छा अभ्यास यह है कि आप एक साझा वर्ग को यूटिलिटीक्लास कहें और इस विधि को एड करें ताकि आप इस पद्धति का उपयोग केवल अपने आवेदन के माध्यम से कॉल करके कर सकें।
आपके पास यह जांचने के लिए 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 के लिए परीक्षण करने की कोई आवश्यकता नहीं है :)।
हैप्पी कोडिंग ...
तो 1 से कम एक स्ट्रिंग लंबाई के लिए जाँच की मूल अवधारणा से अलग, संदर्भ पर गहराई से विचार करना महत्वपूर्ण है। भाषा मानव या कंप्यूटर या अन्यथा खाली स्ट्रिंग की अलग-अलग परिभाषा हो सकती है और उन्हीं भाषाओं के भीतर, अतिरिक्त संदर्भ अर्थ बदल सकते हैं।
मान लें कि रिक्त स्ट्रिंग का अर्थ है "एक स्ट्रिंग जिसमें वर्तमान संदर्भ में कोई भी अक्षर महत्वपूर्ण नहीं है"।
इसका मतलब नेत्रहीन हो सकता है, जैसा कि रंग और पृष्ठभूमि रंग एक जिम्मेदार स्ट्रिंग में समान हैं। प्रभावी रूप से खाली।
यह सार्थक पात्रों के खाली होने का अर्थ हो सकता है। सभी बिंदु या सभी डैश या सभी अंडरस्कोर रिक्त माने जा सकते हैं। इसके अलावा, सार्थक महत्वपूर्ण पात्रों के खाली होने का मतलब यह हो सकता है कि पाठक को समझने वाला कोई भी अक्षर न हो। वे एक भाषा या चरित्र में वर्ण हो सकते हैं जो पाठक के लिए अर्थहीन के रूप में परिभाषित किया जाता है। हम इसे कुछ अलग तरीके से कह सकते हैं कि स्ट्रिंग किसी दिए गए भाषा में कोई ज्ञात शब्द नहीं है।
हम कह सकते हैं कि खाली ग्लाइफ्स में नकारात्मक स्थान के प्रतिशत का एक कार्य है।
यहां तक कि बिना सामान्य दृश्य प्रतिनिधित्व वाले गैर प्रिंट करने योग्य पात्रों का एक क्रम वास्तव में खाली नहीं है। नियंत्रण पात्रों के मन में आते हैं। विशेष रूप से कम ASCII रेंज (मुझे आश्चर्य है कि किसी ने भी उनका उल्लेख नहीं किया है क्योंकि वे बहुत सारे सिस्टम को नली देते हैं और वे व्हाट्सएप नहीं हैं क्योंकि उनके पास आमतौर पर कोई ग्लिफ़ नहीं है और कोई दृश्य मैट्रिक्स नहीं है)। फिर भी स्ट्रिंग की लंबाई शून्य नहीं है।
निष्कर्ष। यहां लंबाई ही एकमात्र उपाय नहीं है। प्रासंगिक सेट सदस्यता भी बहुत महत्वपूर्ण है।
चरित्र सेट सदस्यता एक बहुत ही महत्वपूर्ण सामान्य अतिरिक्त उपाय है। सार्थक क्रम भी काफी सामान्य हैं। (थिंक SETI या क्रिप्टो या कैप्चा) अतिरिक्त अधिक सार संदर्भ सेट भी मौजूद हैं।
इसलिए यह सोचकर ध्यान रखें कि एक स्ट्रिंग केवल लंबाई या व्हाट्सएप के आधार पर खाली है।
NS सहारे को जोड़ने के लिए बहुत उपयोगी पोस्ट, साथ ही एक छोटा सा परिवर्तन
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);
}
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? जल्दी या बाद में, आप पूछ रहे होंगे कि आप किस तरह की कक्षा के साथ काम कर रहे हैं, पहले संदर्भ में इसे करना बेहतर है।
- (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;
}
stringByStrippingWhitespace
सबसे अच्छा तरीका श्रेणी का उपयोग करना है।
आप निम्न फ़ंक्शन की जाँच कर सकते हैं। जिसकी जांच करने के लिए सभी शर्तें हैं।
-(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 (string.length == 0) stringIsEmpty;
यदि स्ट्रिंग इसके साथ खाली है तो आप आसानी से देख सकते हैं:
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) @ "" // कंटेनर स्पेस
तकनीकी रूप से दोनों तार खाली हैं। हम केवल एक शर्त का उपयोग करके दोनों बातें लिख सकते हैं
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
NSLog(@"Empty String");
}
else
{
NSLog(@"String contains some value");
}
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
NSLog(@"String is empty");
}
else{
NSLog(@"String is not empty");
}
str.length
एक अपवाद है अगर str
अशक्त है।
if( [txtMobile.text length] == 0 )
{
[Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
@"\u200B"
(केवल यूनिकोड वर्ण ZERO WIDTH SPACE से युक्त) । इसे प्रिंट करना 0 वर्णों को मुद्रित करेगा (मोनोस्पेस फ़ॉन्ट का उपयोग करके सत्यापित करें), लेकिन string.length देगा 1. अन्य यूनिकोड वर्ण (जैसे OBJECT REPLITEMENT CHARACTER ) हैं जो इसी तरह व्यवहार करते हैं। पीडीएफ पाठ पार्स करते समय उत्तरार्द्ध प्राप्त करें।