NSString басқа жолдан басталатынын қалай көруге болады?

URL ретінде URL ретінде қолданылатын жолдың 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];

Кез келген идеялар?

144

5 жауаптар

Мынаны қолданыңыз: if ([myString hasPrefix: @ «http»]) .

Айтпақшы, сіздің тестіңіз == NSNotFound орнына ! = NSNotFound болуы керек. Бірақ сіздің URL-тіңіз: ftp://my_http_host.com/thing> , ол сәйкес келеді, бірақ олай болмауы керек.

316
қосылды
Иә, бұл солай болды. Мен бұған дейін! = Бұрынғы нәрсені байқаған болар едім, бірақ соңында жұмыс істеген hasPrefix болды. Кеңес бергеніңіз үшін рахмет, мен сізге мүмкіндік берер кезде өзіңіздің дұрыс жауап ретінде белгілеймін.
қосылды автор Rob, көзі

Мен бұл әдісті ұнатамын:

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

немесе одан да оңай:

if ([temp hasPrefix:@"http"]) {
    //do your stuff
}
22
қосылды
Уақытша жол 5 таңбадан аз болса, бұл бұзылады. Индекс 0-ден басталады. Бұл жақсы жауап емес. Сондай-ақ, мысалдағы таңба санының сәйкес келмеуі бар: «http» ішінде 5 таңба жоқ. Сондай-ақ, жағдайдың сезімталдықты ескеру қажет.
қосылды автор Daniel, көзі
@JonasG - Иә, сіз substringToIndex мінез-құлқына қатысты дұрыссыз. Алайда, индекс 4 - бұл шын мәнінде бесінші таңба; индекс 0 - бірінші таңба. Мен қате деп ойладым, бұл substringToIndex индексте көрсетілген таңбаны қамтыды, бірақ ол жоқ. Кірістің сезімталдығы пайдаланушының кіруі қатысқан кезде маңызды, ол менің ойымша, бұл сұрақ жауап береді. « HTTP: //WWW..." » деген жағдайды қарастырайық, бірақ ең үлкен мәселе - шешім «ftp» немесе 4 таңбадан аз жолмен кездессе, ерекше жағдайды шығарады.HazPrefix әдісінде бірдей проблема жоқ.
қосылды автор Daniel, көзі
@Daniel Сіз не айтасыз? 5 неге? Бұл NSArray емес ... Индекс 4 - бұл 5-ші емес, 4-ші таңба! Сіз Http немесе hTtP-ні ешқашан көргенсіз бе? Ілмекті сезімтал емес. Сондай-ақ, мәселе http жолынан басталатын ба, 4 таңбадан қысқа емес жолдың бар-жоғын тексеру туралы мәселе болды. hasPrefix: жақсы, бірақ бұл жұмыс істейді. Тоқтатуды тоқтатыңыз
қосылды автор JonasG, көзі
Бұл да жақсы. Осылайша, біршама икемді, түсініктеме үшін рахмет
қосылды автор Rob, көзі

Егер сіз «http:» тексеріп жатсаңыз, ықтималдығы жоқ іздеуді қажет етуіңіз мүмкін:

NSRange prefixRange = 
    [temp rangeOfString:@"http" 
                options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)
5
қосылды

Жылдам нұсқасы:

if line.hasPrefix("#") {
 //checks to see if a string (line) begins with the character "#"
}
2
қосылды
Мен мұның неліктен төмен дауыс бергенін білмеймін ... бұл мұны қарапайым Swift әдісі. Көптеген жаңа iOS әзірлеушілері Swift-ті осы жерден пайдалана алады, ал ОП текobjective-cжауаптарын сұраған.
қосылды автор Richard, көзі
Қарапайым синтаксисті көрсетуге рахмет, бірақ егер if сөзінің айналасында орналастыру() жаман синтаксис емес. Кейбіреулеріміз ескі таймерлер үшін ол нақтыырақ оқиды және дәл солай жұмыс істейді. if (line.hasPrefix («#»))) {} де жұмыс істейді.
қосылды автор Richard, көзі
«Неліктен бұл дауыс төмен екенін білмеймін» - бұл синтаксис дұрыс емес шығар? Егер болса, line.hasPrefix («prefix») {} `болса
қосылды автор superarts.org, көзі

Бұл мәселенің шешімі. Ол қажеті жоқ әріптерді алып тастайды және әріптерге сезімтал емес.

    - (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;
}
0
қосылды