Jon*_*an. 1200 string substring objective-c range ios
如何检查string(NSString)是否包含另一个较小的字符串?
我希望有类似的东西:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Run Code Online (Sandbox Code Playgroud)
但我能找到的最接近的是:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
Run Code Online (Sandbox Code Playgroud)
无论如何,这是查找字符串是否包含另一个字符串的最佳方法吗?
Dav*_*ong 2425
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
NSLog(@"string does not contain bla");
} else {
NSLog(@"string contains bla!");
}
Run Code Online (Sandbox Code Playgroud)
关键是要注意rangeOfString:返回一个NSRange结构,并且文档说它返回结构,{NSNotFound, 0}如果"haystack"不包含"needle".
如果您使用的是iOS 8或OS X Yosemite,您现在可以:(*注意:如果在iOS7设备上调用此代码,这将使您的应用程序崩溃).
NSString *string = @"hello bla blah";
if ([string containsString:@"bla"]) {
NSLog(@"string contains bla!");
} else {
NSLog(@"string does not contain bla");
}
Run Code Online (Sandbox Code Playgroud)
P i*_*P i 158
注意:这个答案现在已经过时了
为NSString创建一个类别:
@interface NSString ( SubstringSearch )
- (BOOL)containsString:(NSString *)substring;
@end
// - - - -
@implementation NSString ( SubstringSearch )
- (BOOL)containsString:(NSString *)substring
{
NSRange range = [self rangeOfString : substring];
BOOL found = ( range.location != NSNotFound );
return found;
}
@end
Run Code Online (Sandbox Code Playgroud)
编辑:观察Daniel Galasko关于命名的评论
Luk*_*kas 53
由于这似乎是谷歌的高排名结果,我想添加这个:
iOS 8和OS X 10.10将containsString:方法添加到NSString.这些系统的Dave DeLong示例的更新版本:
NSString *string = @"hello bla bla";
if ([string containsString:@"bla"]) {
NSLog(@"string contains bla!");
} else {
NSLog(@"string does not contain bla");
}
Run Code Online (Sandbox Code Playgroud)
AJS*_*AJS 39
NSString *myString = @"hello bla bla";
NSRange rangeValue = [myString rangeOfString:@"hello" options:NSCaseInsensitiveSearch];
if (rangeValue.length > 0)
{
NSLog(@"string contains hello");
}
else
{
NSLog(@"string does not contain hello!");
}
Run Code Online (Sandbox Code Playgroud)
//您也可以使用以下内容:
if (rangeValue.location == NSNotFound)
{
NSLog(@"string does not contain hello");
}
else
{
NSLog(@"string contains hello!");
}
Run Code Online (Sandbox Code Playgroud)
iGo*_*iGo 22
使用iOS 8和Swift,我们可以使用localizedCaseInsensitiveContainsString 方法
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
Run Code Online (Sandbox Code Playgroud)
uca*_*tit 13
所以我个人非常讨厌,NSNotFound但要了解它的必要性.
但有些人可能不了解与NSNotFound比较的复杂性
例如,这段代码:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if([string rangeOfString:otherString].location != NSNotFound)
return YES;
else
return NO;
}
Run Code Online (Sandbox Code Playgroud)
有它的问题:
1)显然otherString = nil这段代码会崩溃.一个简单的测试将是:
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
Run Code Online (Sandbox Code Playgroud)
结果是 !!崩溃!!
2)对于Objective-c的新手来说,不那么明显的是,相同的代码不会在崩溃时崩溃string = nil.例如,这段代码:
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
Run Code Online (Sandbox Code Playgroud)
而这段代码:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
Run Code Online (Sandbox Code Playgroud)
将导致
does string contains string - YES
Run Code Online (Sandbox Code Playgroud)
这显然不是你想要的.
所以我认为更好的解决方案是使用rangeOfString返回长度为0的事实,这样一个更可靠的代码是这样的:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
if(otherString && [string rangeOfString:otherString].length)
return YES;
else
return NO;
}
Run Code Online (Sandbox Code Playgroud)
或者简单:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString {
return (otherString && [string rangeOfString:otherString].length);
}
Run Code Online (Sandbox Code Playgroud)
案件1和案件2将返回
does string contains string - NO
Run Code Online (Sandbox Code Playgroud)
那是我的2美分;-)
请查看我的Gist以获取更多有用的代码.
Vik*_*ica 12
P i解决方案的改进版本,NSString上的一个类别,它不仅会告诉我,如果在另一个字符串中找到一个字符串,而且还通过引用获取范围,则:
@interface NSString (Contains)
-(BOOL)containsString: (NSString*)substring
atRange:(NSRange*)range;
-(BOOL)containsString:(NSString *)substring;
@end
@implementation NSString (Contains)
-(BOOL)containsString:(NSString *)substring
atRange:(NSRange *)range{
NSRange r = [self rangeOfString : substring];
BOOL found = ( r.location != NSNotFound );
if (range != NULL) *range = r;
return found;
}
-(BOOL)containsString:(NSString *)substring
{
return [self containsString:substring
atRange:NULL];
}
@end
Run Code Online (Sandbox Code Playgroud)
使用它像:
NSString *string = @"Hello, World!";
//If you only want to ensure a string contains a certain substring
if ([string containsString:@"ello" atRange:NULL]) {
NSLog(@"YES");
}
// Or simply
if ([string containsString:@"ello"]) {
NSLog(@"YES");
}
//If you also want to know substring's range
NSRange range;
if ([string containsString:@"ello" atRange:&range]) {
NSLog(@"%@", NSStringFromRange(range));
}
Run Code Online (Sandbox Code Playgroud)
这是一个复制粘贴功能代码段:
-(BOOL)Contains:(NSString *)StrSearchTerm on:(NSString *)StrText
{
return [StrText rangeOfString:StrSearchTerm
options:NSCaseInsensitiveSearch].location != NSNotFound;
}
Run Code Online (Sandbox Code Playgroud)
Oneliner(代码量较少.干,因为你只有一个NSLog):
NSString *string = @"hello bla bla";
NSLog(@"String %@", ([string rangeOfString:@"bla"].location == NSNotFound) ? @"not found" : @"cotains bla");
Run Code Online (Sandbox Code Playgroud)
NSString *categoryString = @"Holiday Event";
if([categoryString rangeOfString:@"Holiday"].location == NSNotFound)
{
//categoryString does not contains Holiday
}
else
{
//categoryString contains Holiday
}
Run Code Online (Sandbox Code Playgroud)
小智 5
试试这个,
NSString *string = @"test Data";
if ([[string lowercaseString] rangeOfString:@"data"].location == NSNotFound)
{
NSLog(@"string does not contain Data");
}
else
{
NSLog(@"string contains data!");
}
Run Code Online (Sandbox Code Playgroud)
最佳方案.就这么简单!如果要查找字符串或单词的一部分.您可以使用此代码.在这个例子中,我们将检查word的值是否包含"acter".
NSString *word =@"find a word or character here";
if ([word containsString:@"acter"]){
NSLog(@"It contains acter");
} else {
NSLog (@"It does not contain acter");
}
Run Code Online (Sandbox Code Playgroud)
在Swift 4中:
let a = "Hello, how are you?"
a.contains("Hello") //will return true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
543756 次 |
| 最近记录: |