ios - sidhant - सापेक्षतावादाचा सिद्धान्त




मैं कैसे जांचूं कि स्ट्रिंग में उद्देश्य-सी में कोई स्ट्रिंग है या नहीं? (13)

मैं कैसे जांच सकता हूं कि एक स्ट्रिंग ( 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 *first = @"Banana";
    NSString *second = @"BananaMilk";
    NSRange range = [first rangeOfString:second options:NSCaseInsensitiveSearch];

    if (range.length > 0) {
        NSLog(@"Detected");
    }
    else {
        NSLog(@"Not detected");
    }

इसे इस्तेमाल करे,

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");
}

👍





substring