如何查看 NSString 是否以某个其他字符串开头?

我试图检查,看看是否一个字符串,我要使用作为网址开始的 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];

有什么想法吗?

71033 次浏览

试试这个: if ([myString hasPrefix:@"http"])

顺便说一下,你的测试应该是 != NSNotFound而不是 == NSNotFound。但是假设你的 URL 是 ftp://my_http_host.com/thing,它会匹配,但不应该。

我喜欢用这种方法:

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

或者更简单:

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

如果你正在检查“ http:”,你可能需要不区分大小写的搜索:

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

这是我对这个问题的解决方案。它将删除不必要的字母和不区分大小写。

    - (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;
}

快速版:

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