我正在尝试比较两个字符串
NSString strOne = @"Cat, Dog, Cow";
NSString strTwo = @"Cow";
如何确定strOne是否包含strTwo
答案 0 :(得分:4)
尝试使用rangeOfString:
NSRange result = [strOne rangeOfString:strTwo];
来自文档:
返回
NSRange
结构,给出第一次出现aString
的接收器中的位置和长度。如果找不到aString或为空({NSNotFound, 0}
),则返回@""
。
答案 1 :(得分:1)
对于需要检查代码的人来说,字符串中存在一个字符串,这是我的代码,感谢fbrereto。此示例检查是否可以在字符串(myString)中找到字符串数组(stringArray)中包含的任何字符串:
int count = [stringArray count];
for (NSUInteger x = 0; x < count; ++x) {
NSRange range = [self.myString rangeOfString:[stringArray objectAtIndex:x]];
if (range.length > 0) {
// A match has been found
NSLog(@"string match: %@",[stringArray objectAtIndex:x]);
}
}
答案 2 :(得分:1)
我相信这是检查范围是否存在的正确语法(更正Kendall的响应):
range.location != NSNotFound
答案 3 :(得分:0)
逐渐偏离主题,但我总是会爆炸我的字符串,这意味着只需使用搜索字符串作为键将其爆炸,然后您可以使用数组计数来查看您拥有的实例数。
只是因为任何人都来自使用“爆炸”将字符串吹成像我这样的数组的代码语言,我发现编写我自己的爆炸函数非常有帮助,那些没有使用“爆炸”的人错过了:
- (NSMutableArray *) explodeString : (NSString *)myString key:(NSString*) myKey
{
NSMutableArray *myArray = [[NSMutableArray alloc] init];
NSRange nextBreak = [myString rangeOfString:myKey];
while(nextBreak.location != NSNotFound)
{
[myArray addObject: [myString substringToIndex:nextBreak.location]];
myString = [myString substringFromIndex:nextBreak.location + nextBreak.length];
nextBreak = [myString rangeOfString:myKey];
}
if(myString.length > 0)
[myArray addObject:myString];
return myArray;
}
的工作原理如下:
[self explodeString: @"John Smith|Age: 37|Account Balance: $75.00" key:@"|"];
将返回此数组:
[@"John Smith", @"Age: 37", @"Account Balance: $75.00"];
这使您可以在狭小的空间内快速提取特定值,就像您有客户并想知道他有多少钱一样:
[[self explodeString: clientData key: pipe] objectAtIndex: 1];
或者如果您特意想要将美元金额作为浮点数:
[[[self explodeString: [[self explodeString: clientData key: pipe] objectAtIndex: 1] key: @": "] objectAtIndex: 2] floatValue];
无论如何,我发现数组更容易使用,更灵活,所以这对我很有帮助。此外,只需稍加努力,您就可以为您的私有库创建一个“可爆炸的字符串”数据类型,使您可以将其视为字符串或基于键返回索引值
ExplodableString *myExplodableString;
myExplodableString.string = @"This is an explodable|string";
NSString *secondValue = [myExplodableString useKey: @"|" toGetValue: index];