কোনও এনএসএসআরটিং একটি নির্দিষ্ট অন্যান্য স্ট্রিং দিয়ে শুরু হয় কিনা তা কীভাবে দেখবেন?


152

আমি ইউআরএল হিসাবে যে স্ট্রিংটি ব্যবহার করতে যাচ্ছি তা http দিয়ে শুরু হয় কিনা তা দেখার জন্য আমি চেষ্টা করার চেষ্টা করছি। আমি এখনই যেভাবে যাচাই করার চেষ্টা করছি তা কাজ করছে বলে মনে হচ্ছে না। আমার কোডটি এখানে:

NSMutableString *temp = [[NSMutableString alloc] initWithString:@"http://"];
if ([businessWebsite rangeOfString:@"http"].location == NSNotFound){
    NSString *temp2 = [[NSString alloc] init];
    temp2 = businessWebsite;
    [temp appendString:temp2];
    businessWebsite = temp2;
    NSLog(@"Updated BusinessWebsite is: %@", businessWebsite);
}

[web setBusinessWebsiteUrl:businessWebsite];

কোন ধারনা?

উত্তর:


331

এই চেষ্টা করুন: if ([myString hasPrefix:@"http"])

যাইহোক, আপনার পরীক্ষা != NSNotFoundপরিবর্তে হওয়া উচিত == NSNotFound। তবে বলুন আপনার ইউআরএলটি হল ftp://my_http_host.com/thing, এটি মিলবে কিন্তু হওয়া উচিত নয়।


হ্যাঁ এটা ছিল। আমার আগে! = জিনিসটি লক্ষ্য করা উচিত ছিল, তবে শেষ পর্যন্ত হ্যাশপ্রেমিক্স কাজ করেছিল। পরামর্শের জন্য ধন্যবাদ, আমি আপনাকে তা দেওয়ার সাথে সাথে আপনাকে সঠিক উত্তর হিসাবে চিহ্নিত করব।
রব

23

আমি এই পদ্ধতিটি ব্যবহার করতে চাই:

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}

বা আরও সহজ:

if ([temp hasPrefix:@"http"]) {
    //do your stuff
}

1
ভাল ভাল। এই উপায়টি আরও কিছুটা নমনীয়, মন্তব্যের জন্য ধন্যবাদ
রব

2
টেম্পিং স্ট্রিং 5 টি অক্ষরের কম হলে এটি ক্রাশ হবে will সূচক 0 থেকে শুরু হয়। সুতরাং এটি ভাল উত্তর নয়। এছাড়াও, উদাহরণটিতে একটি অক্ষর গণনা মিল নেই: "http" এর 5 টি অক্ষর নেই। কেসে সংবেদনশীলতাও বিবেচনা করা উচিত।
ড্যানিয়েল

@ ড্যানিয়েল আপনি কি বলছেন? কেন 5? এটি কোনও এনএসআরাই নয় ... সূচক 4 হ'ল 4 তম অক্ষর নয়! এবং আপনি কি কখনও এইচটিটিপি বা এইচটিটিপি দেখেছেন? সংবেদনশীল কেস প্রাসঙ্গিক নয়। এছাড়াও প্রশ্নটি স্ট্রিংটি 4 টির চেয়ে কম অক্ষরের স্ট্রিং সম্পর্কে নয়, এইচটিপি দিয়ে শুরু হয় কিনা তা যাচাইয়ের বিষয়ে ছিল। hasPrefix: আরও ভাল তবে এটি ঠিক পাশাপাশি কাজ করে।
ঝকঝকে

3
@ জোনাসজি - হ্যাঁ, আপনি স্ট্রিংটোইডেক্সের আচরণ সম্পর্কে সঠিক। দ্রষ্টব্য, তবে সূচী 4 আসলে 5 তম অক্ষর; সূচক 0 প্রথম অক্ষর character আমি ভুল করে ধরে নিয়েছিলাম যে স্ট্রিংটোইন্ডেক্সে সূচক দ্বারা বর্ণিত অক্ষর অন্তর্ভুক্ত রয়েছে, তবে তা হয় না। ব্যবহারকারীর ইনপুট জড়িত থাকাকালীন কেস সংবেদনশীলতা প্রাসঙ্গিক, যা আমি বিশ্বাস করি যে প্রশ্নটি ইঙ্গিত করে। " HTTP: // WWW ..." এর ক্ষেত্রে বিবেচনা করুন । তবে সবচেয়ে বড় সমস্যাটি হ'ল প্রস্তাবিত সমাধানটি "ftp" বা 4 টির চেয়ে কম বর্ণের স্ট্রিংয়ের মুখোমুখি হলে একটি ব্যতিক্রম ছুঁড়ে দেয়। HasPrefix পদ্ধতিতে একই সমস্যা নেই।
ড্যানিয়েল

6

আপনি যদি "HTTP:" অনুসন্ধান করছেন তবে আপনি সম্ভবত কেস-সংবেদনশীল অনুসন্ধান চাইবেন:

NSRange prefixRange = 
    [temp rangeOfString:@"http" 
                options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)

2

সুইফ্ট সংস্করণ:

if line.hasPrefix("#") {
  // checks to see if a string (line) begins with the character "#"
}

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

"কেন জানি এটিকে নিচে ভোট দেওয়া হয়েছিল" - সম্ভবত সিনট্যাক্সটি ভুল বলে? হওয়া উচিত if line.hasPrefix("prefix"){} `
superarts.org

1
একটি সহজ বাক্য গঠন নির্দেশ করার জন্য ধন্যবাদ, তবে একটি if এর বিবরণটি খারাপ সিনট্যাক্স না হয়ে প্রায় () স্থাপন করার জন্য। আমাদের মধ্যে কিছু পুরানো টাইমারদের জন্য, এটি আরও স্পষ্টভাবে পড়ে এবং ঠিক একইভাবে কাজ করে। if (line.hasPrefix("#")) {}ঠিক পাশাপাশি কাজ করে।
রিচার্ড

-1

এটিই আমার সমস্যার সমাধান। এটি প্রয়োজনীয় নয় এমন অক্ষরগুলি সরিয়ে ফেলবে এবং এটি সংবেদনশীল।

    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [self generateSectionTitles];
}

-(NSArray *)generateSectionTitles {

    NSArray *alphaArray = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];

    NSMutableArray *sectionArray = [[NSMutableArray alloc] init];

    for (NSString *character in alphaArray) {



        if ([self stringPrefix:character isInArray:self.depNameRows]) {
            [sectionArray addObject:character];
        }

    }

    return sectionArray;

}

-(BOOL)stringPrefix:(NSString *)prefix isInArray:(NSArray *)array {

    for (NSString *str in array) {

        //I needed a case insensitive search so [str hasPrefix:prefix]; would not have worked for me.
        NSRange prefixRange = [str rangeOfString:prefix options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
        if (prefixRange.location != NSNotFound) {
            return TRUE;
        }

    }

    return FALSE;

}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {

    NSInteger newRow = [self indexForFirstChar:title inArray:self.depNameRows];
    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:newRow inSection:0];
    [tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];

    return index;
}

// Return the index for the location of the first item in an array that begins with a certain character
- (NSInteger)indexForFirstChar:(NSString *)character inArray:(NSArray *)array
{
    NSUInteger count = 0;
    for (NSString *str in array) {

        //I needed a case insensitive search so [str hasPrefix:prefix]; would not have worked for me.
        NSRange prefixRange = [str rangeOfString:character options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
        if (prefixRange.location != NSNotFound) {
            return count;
        }
        count++;
    }
    return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.