ios - sidhant - सापेक्षतावादाचा सिद्धान्त
मैं कैसे जांचूं कि स्ट्रिंग में उद्देश्य-सी में कोई स्ट्रिंग है या नहीं? (13)
पहली स्ट्रिंग में दूसरी स्ट्रिंग होती है या नहीं,
NSString *first = @"Banana";
NSString *second = @"BananaMilk";
NSRange range = [first rangeOfString:second options:NSCaseInsensitiveSearch];
if (range.length > 0) {
NSLog(@"Detected");
}
else {
NSLog(@"Not detected");
}
मैं कैसे जांच सकता हूं कि एक स्ट्रिंग ( NSString
) में एक और छोटी स्ट्रिंग है या नहीं?
मैं कुछ ऐसा करने की उम्मीद कर रहा था:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
लेकिन सबसे नज़दीक मुझे मिल सकता था:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
वैसे भी, क्या यह पता लगाने का सबसे अच्छा तरीका है कि स्ट्रिंग में कोई और स्ट्रिंग है या नहीं?
इसे इस्तेमाल करे,
NSString *string = @"test Data";
if ([[string lowercaseString] rangeOfString:@"data"].location == NSNotFound)
{
NSLog(@"string does not contain Data");
}
else
{
NSLog(@"string contains data!");
}
कृपया इस कोड का प्रयोग करें
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound)
{
NSLog(@"string does not contain bla");
}
else
{
NSLog(@"string contains bla!");
}
चूंकि यह Google में एक उच्च रैंकिंग परिणाम प्रतीत होता है, इसलिए मैं इसे जोड़ना चाहता हूं:
आईओएस 8 और ओएस एक्स 10.10 containsString:
है NSString
containsString:
NSString
लिए विधि। उन प्रणालियों के लिए डेव डीलॉन्ग के उदाहरण का एक अद्यतन संस्करण:
NSString *string = @"hello bla bla";
if ([string containsString:@"bla"]) {
NSLog(@"string contains bla!");
} else {
NSLog(@"string does not contain bla");
}
तो व्यक्तिगत रूप से मैं वास्तव में NSNotFound
नफरत करता NSNotFound
लेकिन इसकी आवश्यकता को समझता NSNotFound
।
लेकिन कुछ लोग NSNotFound के खिलाफ तुलना करने की जटिलताओं को समझ नहीं सकते हैं
उदाहरण के लिए, यह कोड:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if([string rangeOfString:otherString].location != NSNotFound)
return YES;
else
return NO;
}
इसकी समस्याएं हैं:
1) जाहिर है अगर अन्य otherString = nil
यह कोड दुर्घटनाग्रस्त हो जाएगा। एक साधारण परीक्षण होगा:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
का परिणाम !! दुर्घटना !!
2) उद्देश्य के लिए नए किसी के लिए इतना स्पष्ट नहीं है-सी यह है कि string = nil
के समान कोड क्रैश नहीं होगा। उदाहरण के लिए, यह कोड:
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
और यह कोड:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
दोनों का परिणाम होगा
does string contains string - YES
जो स्पष्ट रूप से आप नहीं चाहते हैं।
तो बेहतर समाधान जो मैं काम करता हूं, इस तथ्य का उपयोग करना है कि श्रेणीऑफस्ट्रिंग 0 की लंबाई देता है तो एक बेहतर और विश्वसनीय कोड यह है:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if(otherString && [string rangeOfString:otherString].length)
return YES;
else
return NO;
}
या केवल:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
return (otherString && [string rangeOfString:otherString].length);
}
जो मामलों 1 और 2 के लिए वापस आ जाएगा
does string contains string - NO
यह मेरा 2 सेंट है ;-)
अधिक उपयोगी कोड के लिए कृपया मेरी Gist ।
यदि आपको एक बार लिखने की आवश्यकता है:
NSString *stringToSearchThrough = @"-rangeOfString method finds and returns the range of the first occurrence of a given string within the receiver.";
BOOL contains = [stringToSearchThrough rangeOfString:@"occurence of a given string"].location != NSNotFound;
यदि स्ट्रिंग की कुछ स्थिति की आवश्यकता है, तो यह कोड स्विफ्ट 3.0 में होता है :
let string = "This is my string"
let substring = "my"
let position = string.range(of: substring)?.lowerBound
यहां एक कॉपी-एंड-पेस्ट फ़ंक्शन स्निपेट है:
-(BOOL)Contains:(NSString *)StrSearchTerm on:(NSString *)StrText
{
return [StrText rangeOfString:StrSearchTerm
options:NSCaseInsensitiveSearch].location != NSNotFound;
}
स्विफ्ट 4 में:
let a = "Hello, how are you?"
a.contains("Hello") //will return true
पी आई के समाधान का एक बेहतर संस्करण, एनएसएसटींग पर एक श्रेणी, जो न केवल बताएगी, अगर कोई स्ट्रिंग किसी अन्य स्ट्रिंग के भीतर पाई जाती है, लेकिन संदर्भ के अनुसार एक सीमा भी लेती है, तो यह है:
@interface NSString (Contains)
-(BOOL)containsString: (NSString*)substring
atRange:(NSRange*)range;
-(BOOL)containsString:(NSString *)substring;
@end
@implementation NSString (Contains)
-(BOOL)containsString:(NSString *)substring
atRange:(NSRange *)range{
NSRange r = [self rangeOfString : substring];
BOOL found = ( r.location != NSNotFound );
if (range != NULL) *range = r;
return found;
}
-(BOOL)containsString:(NSString *)substring
{
return [self containsString:substring
atRange:NULL];
}
@end
इसका प्रयोग करें जैसे:
NSString *string = @"Hello, World!";
//If you only want to ensure a string contains a certain substring
if ([string containsString:@"ello" atRange:NULL]) {
NSLog(@"YES");
}
// Or simply
if ([string containsString:@"ello"]) {
NSLog(@"YES");
}
//If you also want to know substring's range
NSRange range;
if ([string containsString:@"ello" atRange:&range]) {
NSLog(@"%@", NSStringFromRange(range));
}
आईओएस 8 और स्विफ्ट के साथ , हम localizedCaseInsensitiveContainsString
विधि का उपयोग कर सकते हैं
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
NSString *categoryString = @"Holiday Event";
if([categoryString rangeOfString:@"Holiday"].location == NSNotFound)
{
//categoryString does not contains Holiday
}
else
{
//categoryString contains Holiday
}
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
NSLog(@"string does not contain bla");
} else {
NSLog(@"string contains bla!");
}
कुंजी उस rangeOfString:
को देख रही है rangeOfString:
संरचना लौटाती है, और प्रलेखन कहता है कि यह " {NSNotFound, 0}
" में "सुई" नहीं होने पर संरचना {NSNotFound, 0}
।
और यदि आप आईओएस 8 या ओएस एक्स योसमेट पर हैं, तो आप अब कर सकते हैं: (* नोट: यदि यह कोड आईओएस 7 डिवाइस पर कॉल किया गया है तो यह आपके ऐप को क्रैश करेगा)।
NSString *string = @"hello bla blah";
if ([string containsString:@"bla"]) {
NSLog(@"string contains bla!");
} else {
NSLog(@"string does not contain bla");
}
👍