Objective-C中的NSString indexOf

56

NSString对象中是否有类似于indexOf函数的内容?

4个回答

91

使用- [NSString rangeOfString:]

- (NSRange)rangeOfString:(NSString *)aString;
在接收器中查找并返回给定字符串第一次出现的范围。

12
NSRange.location 表示实际索引位置。 - devios1
2
如果(NSRange.location != NSNotFound)则表示找到了匹配。 - John Erck

29

如果您想知道字符串a是否包含字符串b,可以使用我的方法。

#define contains(str1, str2) ([str1 rangeOfString: str2 ].location != NSNotFound)

//using 
NSString a = @"PUC MINAS - BRAZIL";

NSString b = @"BRAZIL";

if( contains(a,b) ){
    //TO DO HERE
}

这种写法不太易读,但能提高性能。


19

我写了一个分类来扩展原始的NSString对象。也许你们可以参考一下。 (你也可以在我的博客文章中查看。)

ExtendNSString.h:

#import <Foundation/Foundation.h>

@interface NSString (util)

- (int) indexOf:(NSString *)text;

@end

ExtendNSStriing.m:

#import "ExtendNSString.h"

@implementation NSString (util)

- (int) indexOf:(NSString *)text {
    NSRange range = [self rangeOfString:text];
    if ( range.length > 0 ) {
        return range.location;
    } else {
        return -1;
    }
}

@end

3
NSRange的更好用法应该如下所示: code
  • (int) indexOf:(NSString *)text { NSRange range = [self rangeOfString:text]; if (range.location != NSNotFound) { return (int)range.location; // 将NSUInteger类型转换为int类型 } else { return -1; } } code
- loretoparisi
漂亮、干净、可重用的解决方案。并且对苹果公司投了-1票,因为他们在2014年仍然让我们编写如此明显简单的辅助函数。为什么他们不能让我们的生活更轻松呢? - Mike Gledhill

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接