मैं यह जांचना चाहता हूं कि कोई विशेष स्ट्रिंग केवल रिक्त स्थान से बना है या नहीं। यह शून्य सहित कई रिक्त स्थान हो सकता है। यह निर्धारित करने का सबसे अच्छा तरीका क्या है?जांचें कि क्या एनएसएसटींग सिर्फ रिक्त स्थान से बना है
उत्तर
NSString *str = @" ";
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
if ([[str stringByTrimmingCharactersInSet: set] length] == 0)
{
// String contains only whitespace.
}
ट्रिम स्पेस और शेष वर्णों की संख्या की जांच करें। इस पोस्ट पर एक नजर डालें here
रिक्त स्थान की यह अलग करना और @ करने के लिए "" उसकी तुलना का प्रयास करें: यहाँ
[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
या
[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
इस प्रयास करें @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
यह एक 'एनएसएमयूटेबलस्ट्रिंग' विधि है। –
उम, नहीं, यह नहीं है। यह एक नया एनएसएसटींग देता है और NSString.h में घोषित किया जाता है। – picciano
वास्तव में इसे कहीं भी परिभाषित नहीं किया गया है। –
:
NSString *probablyEmpty = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
BOOL wereOnlySpaces = [probablyEmpty isEqualToString:@""];
यहाँ एक सरल है स्विफ्ट समाधान:
//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
}
नीचे वोट क्यों? – Esqarrouth
यहाँ, उसी के लिए स्विफ्ट संस्करण कोड है
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
}
यह बजाय पूरी स्ट्रिंग ट्रिमिंग की गैर-सफ़ेद वर्णों की श्रेणी के लिए जाँच करने के लिए काफी तेजी है।
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 में पेस्ट करें।
यह उत्तर अब तक का सबसे अच्छा है। मैं वास्तव में हैरान था कि इतने सारे लोग अंधाधुंध समाधान के लिए गए थे। आपको टाइपो को ठीक करना चाहिए हालांकि: यदि range.location! = NSNotFound इसका मतलब है कि आपको एक गैर-डब्ल्यूएस चार मिला है, जिसका अर्थ है कि स्ट्रिंग खाली नहीं है। तो आपको स्थिति को उलटने की जरूरत है। – battlmonstr
स्विफ्ट 3 के लिए इस कोड का उपयोग करने के लिए है:
func isEmptyOrContainsOnlySpaces() -> Bool {
return self.trimmingCharacters(in: .whitespaces).characters.count == 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
स्थिति के आधार पर कोई व्यक्ति 'व्हाइटस्पेस और न्यूलाइन कैरेक्टरसेट' का उपयोग करना चाह सकता है (एक्सा करता है टिन पर यह क्या कहता है)। – BoltClock