2011-09-01 4 views
47

मैं यह जांचना चाहता हूं कि कोई विशेष स्ट्रिंग केवल रिक्त स्थान से बना है या नहीं। यह शून्य सहित कई रिक्त स्थान हो सकता है। यह निर्धारित करने का सबसे अच्छा तरीका क्या है?जांचें कि क्या एनएसएसटींग सिर्फ रिक्त स्थान से बना है

उत्तर

101
NSString *str = @"   "; 
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet]; 
if ([[str stringByTrimmingCharactersInSet: set] length] == 0) 
{ 
    // String contains only whitespace. 
} 
+21

स्थिति के आधार पर कोई व्यक्ति 'व्हाइटस्पेस और न्यूलाइन कैरेक्टरसेट' का उपयोग करना चाह सकता है (एक्सा करता है टिन पर यह क्या कहता है)। – BoltClock

0

ट्रिम स्पेस और शेष वर्णों की संख्या की जांच करें। इस पोस्ट पर एक नजर डालें here

8

रिक्त स्थान की यह अलग करना और @ करने के लिए "" उसकी तुलना का प्रयास करें: यहाँ

[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

या

[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
2

इस प्रयास करें @Alexander Akers के उत्तर के आधार पर NSString पर आसानी से पुन: प्रयोज्य श्रेणी है, लेकिन यह भी YES यदि स्ट्रिंग "नई लाइनों" शामिल हैं रिटर्न ...

@interface NSString (WhiteSpaceDetect) 
@property (readonly) BOOL isOnlyWhitespace; 
@end 
@implementation NSString (WhiteSpaceDetect) 
- (BOOL) isOnlyWhitespace { 
    return ![self stringByTrimmingCharactersInSet: 
      [NSCharacterSet whitespaceAndNewlineCharacterSet]].length; 
} 
@end 

और वहाँ बाहर आप untrusting आत्माओं के उन लोगों के लिए ..

#define WHITE_TEST(x) for (id z in x) printf("\"%s\" : %s\n",[z UTF8String], [z isOnlyWhitespace] ? "YES" :"NO") 

WHITE_TEST(({ @[ 

    @"Applebottom", 
    @"jeans\n", 
    @"\n", 
    @"" 
    "", 
    @" \ 
    \ 
    ", 
    @" " 
];})); 

"Applebottom" : NO 
"jeans 
" : NO 
" 
" : YES 
"" : YES 
" " : YES 
" " : YES 
+0

यह एक 'एनएसएमयूटेबलस्ट्रिंग' विधि है। –

+5

उम, नहीं, यह नहीं है। यह एक नया एनएसएसटींग देता है और NSString.h में घोषित किया जाता है। – picciano

+0

वास्तव में इसे कहीं भी परिभाषित नहीं किया गया है। –

0

:

NSString *probablyEmpty = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
BOOL wereOnlySpaces = [probablyEmpty isEqualToString:@""]; 
-1

यहाँ एक सरल है स्विफ्ट समाधान:

//Check if string contains only empty spaces and new line characters 
static func isStringEmpty(#text: String) -> Bool { 
    let characterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet() 
    let newText = text.stringByTrimmingCharactersInSet(characterSet) 
    return newText.isEmpty 
} 
+0

नीचे वोट क्यों? – Esqarrouth

-1

यहाँ, उसी के लिए स्विफ्ट संस्करण कोड है

var str = "Hello World" 
if count(str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 { 
    // String is empty or contains only white spaces 
} 
else { 
    // String is not empty and contains other characters 
} 

या आप नीचे की तरह एक साधारण स्ट्रिंग विस्तार लिख सकते हैं और कई स्थानों पर बेहतर पठनीयता के साथ एक ही कोड का उपयोग कर सकते हैं।

extension String { 
    func isEmptyOrContainsOnlySpaces() -> Bool { 
     return count(self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 
    } 
} 

और सिर्फ इस तरह कोई भी स्ट्रिंग का उपयोग कर इसे कहते हैं,

var str1 = " " 
if str.isEmptyOrContainsOnlySpaces() { 
    // custom code e.g Show an alert 
} 
7

यह बजाय पूरी स्ट्रिंग ट्रिमिंग की गैर-सफ़ेद वर्णों की श्रेणी के लिए जाँच करने के लिए काफी तेजी है।

NSCharacterSet *inverted = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet]; 
NSRange range = [string rangeOfCharacterFromSet:inverted]; 
BOOL empty = (range.location == NSNotFound); 

ध्यान दें कि रिक्त स्थान और पाठ के मिश्रण के साथ शायद "भरा" शायद सबसे आम मामला है।

testSpeedOfSearchFilled - 0.012 sec 
testSpeedOfTrimFilled - 0.475 sec 
testSpeedOfSearchEmpty - 1.794 sec 
testSpeedOfTrimEmpty - 3.032 sec 

टेस्ट मेरे आईफोन 6+ पर चलते हैं। कोड here। किसी भी XCTestCase उपclass में पेस्ट करें।

+2

यह उत्तर अब तक का सबसे अच्छा है। मैं वास्तव में हैरान था कि इतने सारे लोग अंधाधुंध समाधान के लिए गए थे। आपको टाइपो को ठीक करना चाहिए हालांकि: यदि range.location! = NSNotFound इसका मतलब है कि आपको एक गैर-डब्ल्यूएस चार मिला है, जिसका अर्थ है कि स्ट्रिंग खाली नहीं है। तो आपको स्थिति को उलटने की जरूरत है। – battlmonstr

0

स्विफ्ट 3 के लिए इस कोड का उपयोग करने के लिए है:

func isEmptyOrContainsOnlySpaces() -> Bool { 

    return self.trimmingCharacters(in: .whitespaces).characters.count == 0 
} 
0

मैं वाकई हैरान है कि मैं पहली बार कर रहा हूँ, जो पता चलता है हूँ नियमित अभिव्यक्ति

NSString *string = @"   "; 
NSString *pattern = @"^\\s*$"; 
NSRegularExpression *expression = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; 
NSArray *matches = [expression matchesInString:string options:0 range:NSMakeRange(0, string.length)]; 
BOOL isOnlyWhitespace = matches.count; 

या स्विफ्ट में:

let string = "   " 
let pattern = "^\\s*$" 
let expression = try! NSRegularExpression(pattern:pattern, options:[]) 
let matches = expression.matches(in: string, options: [], range:NSRange(location: 0, length: string.utf16.count)) 
let isOnlyWhitespace = !matches.isEmpty