আমি কীভাবে চেক করব যে স্ট্রিংয়ের উদ্দেশ্য-সি-তে অন্য স্ট্রিং রয়েছে কিনা?


1212

স্ট্রিং ( NSString) এ অন্য একটি ছোট স্ট্রিং রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি ?

আমি এমন কিছু আশা করছিলাম:

NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);

তবে আমি সবচেয়ে কাছেরটি খুঁজে পেতে পারি:

if ([string rangeOfString:@"hello"] == 0) {
    NSLog(@"sub string doesnt exist");
} 
else {
    NSLog(@"exists");
}

যাইহোক, স্ট্রিংয়ে অন্য স্ট্রিং রয়েছে কিনা তা সন্ধানের সেরা উপায়?


1
আমি এটিও যুক্ত দেখতে দেখতে চাই তবে এর মধ্যে এটি এনএসএসস্ট্রিংয়ের বিভাগ হিসাবে যুক্ত করা তুলনামূলক সহজ।
ইসাহাক

2
ব্যবহার if ([string rangeOfString:@"hello"] == 0) {...}সেখানে NSRange এবং int জন্য একটি টাইপ মেলেনি ত্রুটি। এটি ঠিক করতে, আপনার লাইনটি নিম্নলিখিতটিতে পরিবর্তন করা উচিত:if ([string rangeOfString:@"hello"].length == 0) {...}
নেকু

1
আইওএস 8 এ যুক্ত স্ট্রিং
স্টিভ মোজার

2
আমি প্রথম থেকেই আইওএস বিকাশকারী এবং দ্রুত অনুলিপি পেস্টের জন্য আমি এই পোস্টটিতে ক্রমাগত ঘুরে দেখি। আমি এটিকে মুখস্থ করতে পারি না। আমার ইতিহাসে সর্বাধিক পরিদর্শন করা স্ট্যাকওভারফ্লো পোস্ট।
ভ্যাপারওয়ারওয়াল্ফ

কেবল সুইফ্ট ব্যবহার করুন;)
ফ্যাটি

উত্তর:


2436
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
  NSLog(@"string does not contain bla");
} else {
  NSLog(@"string contains bla!");
}

কীটি লক্ষ্য করছে যে rangeOfString:কোনও NSRangeকাঠামো ফেরত দেয় এবং ডকুমেন্টেশন বলে যে {NSNotFound, 0}"কাঠের খড়কে" "সুই" না থাকলে এটি কাঠামোটি ফিরিয়ে দেয় ।


এবং আপনি যদি আইওএস 8 বা ওএস এক্স জোসেমাইটে থাকেন তবে আপনি এখন এটি করতে পারেন: (* দ্রষ্টব্য: এই কোডটি কোনও আইওএস 7 ডিভাইসে কল করা হলে এটি আপনার অ্যাপ্লিকেশনটি ক্রাশ করবে)।

NSString *string = @"hello bla blah";
if ([string containsString:@"bla"]) {
  NSLog(@"string contains bla!");
} else {
  NSLog(@"string does not contain bla");
}

(এটি এটি সুইফটে কীভাবে কাজ করবে)

👍


286
"([: Bla" .location = NSNotFound! NSCaseInsensitiveSearch অপশন একটি মামলা অবশ অনুসন্ধান ব্যবহার @ স্ট্রিং rangeOfString]) "যদি" তৈরি করতে হলে
Vanja

1
@ ডেভ দেলং আমি উত্তরের জন্য আপনার সম্পাদনাটি পড়ার আগে আমি কেবল এই উদ্দেশ্যে তৈরি করা একটি বিভাগের কথা উল্লেখ করছি! যেহেতু আমি প্রাথমিকভাবে এসি # বিকাশকারী, আমি আনন্দিত যে তারা এনএসএসআরটিতে একটি পদ্ধতি যুক্ত করেছে।
dherrin79

আমার স্থাপনার লক্ষ্য যদি iOS7 হয় এবং আমি কন্ট্রাস্টিং ব্যবহার করি তবে সংকলক কেন কিছু বলবে না?
রিকার্ডো

3
এবং @ ভানজার তৈরি করা বিন্দুটি আরও জানাতে: আপনি যদি আইওএস 8 / ইওসোমাইটে প্রবর্তিত [স্ট্রিং অন্তর্ভুক্ত স্ট্রিং] শর্টকাট কোডটি ব্যবহার করতে চলেছেন তবে আপনি একটি সংবেদনশীল স্ট্রিংয়ের জন্য নিম্নলিখিত কোডটি ব্যবহার করতে পারেন: "[স্ট্রিংটসোসার্কলাইজড কেসআইসেনসেটিভ কনটেনস স্ট্রিং: স্ট্রিং ] ", এবং আপনি যদি কেস এবং ডায়াক্রিটিক সংবেদনশীল অনুসন্ধান করতে চান তবে এটি একটি:" [স্ট্রিংটোসকোচ লোকালাইজড স্ট্যান্ডার্ড কনটেনস স্ট্রিং: স্ট্রিং] "।
স্কট কোহলার্ট

1
নোট করুন যে স্ট্রিং হলে এক্সপ্রেশনটি সত্য[string rangeOfString:@"bla"].location != NSNotFound হবে ! nil
ফিনরল

158

আইওএস 8.0+ এবং ম্যাকোস 10.10+ এর জন্য, আপনি এনএসএসটিংয়ের নেটিভ ব্যবহার করতে পারেন containsString:

আইওএস এবং ম্যাকোসের পুরানো সংস্করণগুলির জন্য, আপনি এনএসএসটিংয়ের জন্য আপনার নিজস্ব (অপ্রচলিত) বিভাগ তৈরি করতে পারেন:

@interface NSString ( SubstringSearch )
    - (BOOL)containsString:(NSString *)substring;
@end

// - - - - 

@implementation NSString ( SubstringSearch )

- (BOOL)containsString:(NSString *)substring
{    
    NSRange range = [self rangeOfString : substring];
    BOOL found = ( range.location != NSNotFound );
    return found;
}

@end

দ্রষ্টব্য: নামকরণের বিষয়ে নীচে ড্যানিয়েল গালাস্কোর মন্তব্য লক্ষ্য করুন


13
পরিষ্কার ফলাফল এবং পুনরায় ব্যবহারযোগ্যতার জন্য +1। আমি এটিকে এক return [self rangeOfString:substring].location != NSNotFound;লাইনে পরিণত করেছিলাম এবং এটি আমার রিফ্যাক্টরিং লাইব্রেরি, এস_আইওস_উটিলে অন্তর্ভুক্ত করেছি। github.com/peterdeweese/es_ios_utils
পিটার

4
দেখে মনে হচ্ছে অ্যাপল আপনার ধারণা পছন্দ করেছে এবং @ ডেভিডলং তার উত্তরে উল্লিখিত হিসাবে আইওএস 8 এবং ওএসএক্স 10.10 (ইয়োসেমাইট) এ এই বৈশিষ্ট্যটি যুক্ত করেছে। +1
ইসলাম Q.

7
উদ্দেশ্য-সি বিভাগগুলির জন্য মূল নিয়মটি হল আপনার 3 অক্ষরের মডিউল উপসর্গের সাথে পদ্ধতির নামটি উপস্থাপন করা। এটি এখনই আইওএস 7 এবং 10.10 প্রকাশের সাথে বিরোধের কারণ এটি নিখুঁত উদাহরণ
ড্যানিয়েল গালাসকো

54

যেহেতু গুগলে এটি উচ্চ-পদমর্যাদার ফলাফল বলে মনে হচ্ছে, আমি এটি যুক্ত করতে চাই:

আইওএস 8 এবং ওএস এক্স 10.10 containsString:পদ্ধতিটিতে যুক্ত করুন NSString। এই সিস্টেমগুলির জন্য ডেভ দেলংয়ের উদাহরণের একটি আপডেট সংস্করণ:

NSString *string = @"hello bla bla";
if ([string containsString:@"bla"]) {
    NSLog(@"string contains bla!");
} else {
    NSLog(@"string does not contain bla");
}

39
NSString *myString = @"hello bla bla";
NSRange rangeValue = [myString rangeOfString:@"hello" options:NSCaseInsensitiveSearch];

if (rangeValue.length > 0)
{
    NSLog(@"string contains hello");
} 
else 
{
    NSLog(@"string does not contain hello!");
}

// আপনি বিকল্পভাবে নিম্নলিখিত ব্যবহার করতে পারেন:

if (rangeValue.location == NSNotFound) 
{
    NSLog(@"string does not contain hello");
} 
else 
{
    NSLog(@"string contains hello!");
}

22

সঙ্গে iOS 8 এ এবং সুইফট , আমরা ব্যবহার করতে পারেন localizedCaseInsensitiveContainsString পদ্ধতি

 let string: NSString = "Café"
 let substring: NSString = "É"

 string.localizedCaseInsensitiveContainsString(substring) // true

1
এটা ভাল. আইওএস 7
লুকাস

@ লুকাস, কারণ সুইফট আইওএস 8.0 দিয়ে চালু করেছে। তবে দ্রুত সঙ্গে আপনি এখনও আইওএস 7 দিয়ে ডিভাইসগুলি সমর্থন করতে পারেন
হেমাং

13

সুতরাং ব্যক্তিগতভাবে আমি সত্যিই ঘৃণা করি 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");

ফলাফল স্বরূপ !! ক্রাশ !!

২) অবজেক্ট-সি-তে নতুন কারও কাছে এতটা স্পষ্ট নয় যে একই কোডটি ক্র্যাশ হবে না 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 সেন্ট ;-)

আরও সহায়ক কোডের জন্য দয়া করে আমার গিস্টটি দেখুন।


12

পি আই এর সমাধানের একটি উন্নত সংস্করণ, এনএসএসটিংয়ের একটি বিভাগ, যা কেবল এটিই বলবে না, যদি অন্য স্ট্রিংয়ের মধ্যে একটি স্ট্রিং পাওয়া যায়, তবে রেফারেন্স অনুসারে একটি ব্যাপ্তিও নেয়:

@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

এখানে একটি অনুলিপি এবং পেস্ট ফাংশন স্নিপেট:

-(BOOL)Contains:(NSString *)StrSearchTerm on:(NSString *)StrText
{
    return [StrText rangeOfString:StrSearchTerm 
        options:NSCaseInsensitiveSearch].location != NSNotFound;
}

আমি জানি কেন আমি নিম্নচাপে আছি? এটি একটি কার্যকরী কোড স্নিপেট
দুরাই আমুথান H

6

অনেলাইনার (কোডের ক্ষুদ্র পরিমাণ DR ডিআরওয়াই, যেমন আপনার কেবল একটি রয়েছে NSLog):

NSString *string = @"hello bla bla";
NSLog(@"String %@", ([string rangeOfString:@"bla"].location == NSNotFound) ? @"not found" : @"cotains bla"); 

6
NSString *categoryString = @"Holiday Event";
if([categoryString rangeOfString:@"Holiday"].location == NSNotFound)
{
    //categoryString does not contains Holiday
}
else
{
    //categoryString contains Holiday
}

5

এটা চেষ্টা কর,

NSString *string = @"test Data";
if ([[string lowercaseString] rangeOfString:@"data"].location == NSNotFound) 
{
    NSLog(@"string does not contain Data");
}   
else 
{
    NSLog(@"string contains data!");
}

5

সবচেয়ে ভালো সমাধান. এত সহজ! আপনি যদি কোনও শব্দ বা স্ট্রিংয়ের কিছু অংশ খুঁজতে চান। আপনি এই কোড ব্যবহার করতে পারেন। এই উদাহরণে আমরা যাচাই করতে যাচ্ছি যে শব্দের মান "অ্যাক্টর" রয়েছে কিনা।

NSString *word =@"find a word or character here";
if ([word containsString:@"acter"]){
    NSLog(@"It contains acter");
} else {
     NSLog (@"It does not contain acter");
}


4

আপনার যদি এটির প্রয়োজন হয় তবে একবার লিখুন:

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;

4

দ্রুততার ক্ষেত্রে, এটি ব্যবহার করা যেতে পারে

let string = "Package #23"
if string.containsString("Package #") {
    //String contains substring
}
else {
    //String does not contain substring
}

2

কেস-সংবেদনশীল স্ট্রিং নিয়ে মাথা ঘামান না। একবার চেষ্টা করে দেখুন

NSString *string  = @"Hello World!";

if([string rangeOfString:@"hello" options:NSCaseInsensitiveSearch].location !=NSNotFound)
{
    NSLog(@"found");
}
else
{
    NSLog(@"not found");
}

1

দয়া করে এই কোডটি ব্যবহার করুন

NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) 
{
    NSLog(@"string does not contain bla");
} 
else 
{  
    NSLog(@"string contains bla!");
}

1

রেঞ্জঅফস্ট্রিংয়ের সাথে এনএসকেসআইসেনসেটিভ অনুসন্ধান বিকল্পটি ব্যবহার করুন: বিকল্পগুলি:

NSString *me = @"toBe" ;
NSString *target = @"abcdetobe" ;
NSRange range = [target  rangeOfString: me options: NSCaseInsensitiveSearch];
NSLog(@"found: %@", (range.location != NSNotFound) ? @"Yes" : @"No");
if (range.location != NSNotFound) {
// your code
}

আউটপুট ফলাফল পাওয়া গেছে: হ্যাঁ

বিকল্পগুলি একসাথে "বা 'করা যেতে পারে এবং এর মধ্যে রয়েছে:

এনএসকেস সংবেদনশীল অনুসন্ধান NSLiteralSearch এনএসব্যাকওয়ার্ডস অনুসন্ধান এবং আরও অনেক কিছু


0

প্রথম স্ট্রিংয়ে দ্বিতীয় স্ট্রিং থাকে বা না

NSString *first = @"Banana";
NSString *second = @"BananaMilk";
NSRange range = [first rangeOfString:second options:NSCaseInsensitiveSearch];

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

0

এটা চেষ্টা কর:

সুইফট ৪.১, ৪.২:

let stringData = "Black board"

//swift quick way and case sensitive
if stringData.contains("bla") {
    print("data contains string");
}

//case sensitive
if stringData.range(of: "bla",options: .caseInsensitive) != nil {
    print("data contains string");
}else {
    print("data does not contains string");
}

উদ্দেশ্য-সি এর জন্য:

NSString *stringData = @"Black board";

//Quick way and case sensitive
if ([stringData containsString:@"bla"]) {
    NSLog(@"data contains string");
}

//Case Insensitive
if ([stringData rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location != NSNotFound) {
   NSLog(@"data contains string");
}else {
   NSLog(@"data does not contain string");
}

0

সুইফট 4 এবং উপরে

let str = "Hello iam midhun"

if str.contains("iam") {
  //contains substring
}
else {
  //doesn't contain substring
}

উদ্দেশ্য গ

NSString *stringData = @"Hello iam midhun";

if ([stringData containsString:@"iam"]) {
    //contains substring
}
else {
    //doesn't contain substring
}

-1
-(Bool)checkIf:(String)parentString containsSubstring:(String)checkString {
    NSRange textRange =[parentString rangeOfString:checkString];
    return textRange.location != NSNotFound // returns true if parent string contains substring else returns false
  }

1
অবজেক্টিভ-সি-তে আমাদের 'এনএসএসস্ট্রিং' টাইপ রয়েছে। আমাদের Stringটাইপ নেই। দ্বিতীয়ত, আমাদের সমস্ত বস্তু আছে। সুতরাং একটি যুক্তি হিসাবে আপনি পাস করা উচিত NSString। আমি অত্যন্ত সক্রিয় প্রশ্নের অধীনে একটি উত্তরের নিম্নমানের কারণে মুছে ফেলার পক্ষে ভোট দিই।
আলেক্সি পটাপভ

-2

যদি স্ট্রিংয়ের নির্দিষ্ট অবস্থানের প্রয়োজন হয় তবে এই কোডটি সুইফট 3.0.০ এ প্রদর্শিত হবে :

let string = "This is my string"
let substring = "my"

let position = string.range(of: substring)?.lowerBound
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.