কোনও এনএসএসআর্টিং রয়েছে কিনা তা সনাক্ত করছে…?


124

স্ট্রিংয়ে একটি নির্দিষ্ট শব্দ রয়েছে কিনা আমি কীভাবে সনাক্ত করতে পারি? উদাহরণস্বরূপ, আমার নীচে একটি স্ট্রিং রয়েছে যা পড়ে:

@"Here is my string."

আমি জানতে চাইছি আমি উদাহরণস্বরূপ "হ'ল" স্ট্রিংয়ের কোনও শব্দ সনাক্ত করতে পারি কিনা।



26
আপনি একটি উত্তর গ্রহণ করতে পারেন?
জ্যাকব রিলকিন

একটি সস্তার-নোংরা সমাধান, যদি স্ট্রিংটিতে কোনও বিরামচিহ্ন থাকে না বলে ধরে নেওয়া হয়, তবে দুটি স্ট্রিংয়ের সামনের এবং পিছনে ফাঁকা ফাঁকা করা উচিত, তারপরে এটি করুন rangeOfString
হট লিকস

উত্তর:


192

আমি এখানে এটি কীভাবে করব:

NSString *someString = @"Here is my string";
NSRange isRange = [someString rangeOfString:@"is " options:NSCaseInsensitiveSearch];
if(isRange.location == 0) {
   //found it...
} else {
   NSRange isSpacedRange = [someString rangeOfString:@" is " options:NSCaseInsensitiveSearch];
   if(isSpacedRange.location != NSNotFound) {
      //found it...
   }
}

আপনি এটিকে সহজেই এখানে বিভাগ হিসাবে যুক্ত করতে পারেন NSString:

@interface NSString (JRStringAdditions) 

- (BOOL)containsString:(NSString *)string;
- (BOOL)containsString:(NSString *)string
               options:(NSStringCompareOptions)options;

@end

@implementation NSString (JRStringAdditions) 

- (BOOL)containsString:(NSString *)string
               options:(NSStringCompareOptions)options {
   NSRange rng = [self rangeOfString:string options:options];
   return rng.location != NSNotFound;
}

- (BOOL)containsString:(NSString *)string {
   return [self containsString:string options:0];
}

@end

2
প্রকৃতপক্ষে আপনি স্ট্রিংয়ের শুরু এবং শেষের দিকে কেবল স্থান যুক্ত করতে পারেন এবং "হয়" মিলবে স্ট্রিংটি "হয়" দিয়ে শুরু হবে
user4951

আমাকে স্তম্ভিত করে যে এগুলি স্ট্যান্ডার্ড শ্রেণীর অংশ নয়। ধন্যবাদ, @ জ্যাকব!
বড়_ম

1
প্রকৃতপক্ষে, এনএসরেঞ্জের "দৈর্ঘ্য" পরীক্ষা করা উচিত ... "অবস্থান" নয়। এটি সরাসরি উত্স থেকে: "টার্গেটের স্ট্রিংটি পাওয়া না গেলে এই পদ্ধতিগুলি দৈর্ঘ্য == 0 ফেরায় So সুতরাং, সংরক্ষণের জন্য পরীক্ষা করতে: ([ স্ট্রিংএফ স্ট্রিং: @ "টার্গেট"]। দৈর্ঘ্য> 0) নোট করুন যে এই পদ্ধতিগুলি দ্বারা ফিরে আসা ব্যাপ্তির দৈর্ঘ্য লক্ষ্য স্ট্রিংয়ের দৈর্ঘ্যের তুলনায় আলাদা হতে পারে, কারণ রচিত অক্ষর এবং এ জাতীয় ""
GtotheB

আইওএস 8.0 থেকে শুরু করে, containsStringএনএসএসস্ট্রিং-এ এক্সপোজড নামে একটি নতুন পদ্ধতি রয়েছে ।
tedyyu

89

বাক্যে শব্দটি স্ক্যান করতে নিম্নলিখিত কোডটি ব্যবহার করুন।

NSString *sentence = @"The quick brown fox";
NSString *word = @"quack";
if ([sentence rangeOfString:word].location != NSNotFound) {
    NSLog(@"Yes it does contain that word");
}

আমি যখন অ্যারেতে এই পদ্ধতিটি ব্যবহার করি তখন কীভাবে আমি অবস্থানগুলি পেতে পারি?
বিচারক

অ্যারেতে আপনি যা অনুসন্ধান করছেন তা নির্ভর করে। তুলনাকারী ব্যবহার না করে আমি মনে করি সবচেয়ে ভাল উপায় হ'ল অ্যারের মধ্য দিয়ে লুপ করা এবং অনুসন্ধান স্ট্রিংয়ের জন্য প্রতিটি স্ট্রিং পরীক্ষা করা। এনএসএসস্ট্রিং * সার্চস্ট্রিং; (অ্যারে ইন এনএসএসআরিং * স্ট্রিং) এর জন্য {যদি ([স্ট্রিং রেঞ্জঅফস্ট্রিং: সার্চ স্ট্রিং বিকল্পসমূহ: এনএসসেসি সংবেদনশীল অনুসন্ধান) l লোকেশন! = এনএসএনটফাউন্ড) {// স্ট্রিংয়ে নয়} অন্য {// এই স্ট্রিংটিতে then} আপনি তারপরে স্ট্রিং যুক্ত করতে পারেন এটি একটি নতুন পরিবর্তনযোগ্য অ্যারেতে অন্তর্ভুক্ত রাখুন যা আপনি যদি সন্ধান করছেন তবে সেগুলি প্রদর্শন করতে সক্ষম করে
সিমোন_স্মাইলি

পিএস ফর্ম্যাটটি উপরের কোডে সমস্ত সঠিক তবে স্পষ্টতই একটি মন্তব্যে
ছড়িয়ে পড়ে

22

IOS8 এ আপনি এখন ব্যবহার করতে পারেন:

BOOL containsString = [@"Here is my string." containsString:@"is"];

এটি এখানে iOS7 এ কীভাবে "পুনঃনির্মাণ" করা যায় সে সম্পর্কে একটি আকর্ষণীয় পোস্ট রয়েছে: http://petersteinberger.com/blog/2014/retrofitting-containsstring-on-ios-7/


এটি খুব সুন্দর সহজ পদ্ধতি হবে। দুর্ভাগ্যক্রমে এটি নথিভুক্ত করা হয়নি এবং তাই এটি বেসরকারী এপিআই
সেঞ্চুরিয়ান

2
এটি অবশ্যই ব্যক্তিগত এপিআই নয়। NSString.h ফাইলটি দেখুন এবং আপনি এটি দেখতে পাবেন।
ব্রায়ান সাচেটা

3

আমি NSLinguisticTagger ব্যবহার করার পরামর্শ দিচ্ছি । আমরা এটি অনুসন্ধানে ব্যবহার করতে পারিHere is my string. His isn't a mississippi isthmus. It is?

NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[
                                        NSLinguisticTagSchemeTokenType,
                                        ]
                                                                              options:
                                        NSLinguisticTaggerOmitPunctuation |
                                        NSLinguisticTaggerOmitWhitespace |
                                        NSLinguisticTaggerOmitOther ];
[linguisticTagger setString:@"Here is my string. His isn't a mississippi isthmus. It is?"];
[linguisticTagger enumerateTagsInRange:NSMakeRange(0,
                                                   [[linguisticTagger string] length])
                                scheme:NSLinguisticTagSchemeTokenType
                               options:
 NSLinguisticTaggerOmitPunctuation |
 NSLinguisticTaggerOmitWhitespace |
 NSLinguisticTaggerOmitOther |
 NSLinguisticTaggerJoinNames
                            usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
                                NSLog(@"tag: %@, tokenRange: %@, sentenceRange: %@, token: %@",
                                      tag,
                                      NSStringFromRange(tokenRange),
                                      NSStringFromRange(sentenceRange),
                                      [[linguisticTagger string] substringWithRange:tokenRange]);
                            }];

এই ফলাফলগুলি:

tag: Word, tokenRange: {0, 4}, sentenceRange: {0, 19}, token: Here
tag: Word, tokenRange: {5, 2}, sentenceRange: {0, 19}, token: is
tag: Word, tokenRange: {8, 2}, sentenceRange: {0, 19}, token: my
tag: Word, tokenRange: {11, 6}, sentenceRange: {0, 19}, token: string
tag: Word, tokenRange: {19, 3}, sentenceRange: {19, 33}, token: His
tag: Word, tokenRange: {23, 2}, sentenceRange: {19, 33}, token: is
tag: Word, tokenRange: {25, 3}, sentenceRange: {19, 33}, token: n't
tag: Word, tokenRange: {29, 1}, sentenceRange: {19, 33}, token: a
tag: Word, tokenRange: {31, 11}, sentenceRange: {19, 33}, token: mississippi
tag: Word, tokenRange: {43, 7}, sentenceRange: {19, 33}, token: isthmus
tag: Word, tokenRange: {52, 2}, sentenceRange: {52, 6}, token: It
tag: Word, tokenRange: {55, 2}, sentenceRange: {52, 6}, token: is

এটি উপেক্ষা করে His mississippi এবং এরisthmus সনাক্ত isকরে isn't


3

আমি আশা করি এটি আপনাকে সহায়তা করে, .. .m ফাইলে এই লাইনটি যুক্ত করুন বা একটি পৃথক শ্রেণী তৈরি করুন এবং এই কোডটি সংহত করুন।

@implementation NSString (Contains)

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

2

আইওএস 8 এবং সুইফ্টের সাহায্যে আমরা স্থানীয়করণকেন্সি সংবেদনশীল কনটেনস স্ট্রিং পদ্ধতিটি ব্যবহার করতে পারি

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

 string.localizedCaseInsensitiveContainsString(substring) // true

0

একটি সম্পূর্ণ সমাধান প্রথমে স্ট্রিংটির জন্য স্ক্যান করে (যোগ ফাঁকা ছাড়াই), তারপরে তাত্ক্ষণিকভাবে পূর্ববর্তী অক্ষরটি ফাঁকা বা লাইনের শুরু কিনা তা পরীক্ষা করে দেখুন। একইভাবে তাত্ক্ষণিকভাবে নীচের অক্ষরটি ফাঁকা বা লাইনের শেষ কিনা তা পরীক্ষা করে দেখুন। যদি উভয় পরীক্ষা পাস করে তবে আপনার একটি ম্যাচ আছে। আপনার চাহিদা আপনার কাছে চেক পারে উপর নির্ভর করে ,, .,() , ইত্যাদি

অবশ্যই একটি বিকল্প পন্থা হ'ল স্ট্রিংকে শব্দের মধ্যে পার্স করা এবং প্রতিটি শব্দ পৃথকভাবে পরীক্ষা করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.