首页 > 学院 > 开发设计 > 正文

NSRange

2019-11-14 19:45:33
字体:
来源:转载
供稿:网友

来自网络,为自己好记保存下,希望对你也有用!

 

NSRange的定义

typedef struct _NSRange

{

  NSUInteger location;

  NSUInteger length;

} NSRange;

 

NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象的长度。他们都是NSUInteger类型。 而NSUInteger类型的定义如下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_ipHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef unsigned long NSUInteger;

#else

typedef unsigned int NSUInteger;

#endif

例子:

下面这个例子,将输出IPA

NSString *homebrew = @"Imperial India Pale Ale (IPA)";

 

// Starting at position 25, get 3 characters

NSRange range = NSMakeRange (25, 3);

// This would also work:

// NSRange range = {25, 3};

NSLog (@"Beer shortname: %@", [homebrew substringWithRange:range]);

搜索字符串:

NSString *homebrew = @"Imperial India Pale Ale (IPA)";

NSRange range = [homebrew rangeOfString:@"IPA"];

// Did we find the string "IPA" ?

if (range.length > 0)

  NSLog(@"Range is: %@", NSStringFromRange(range));

 

上面的程序将输出Range is: {25, 3}。NSStringFromRange()方法,将一个NSRange返回一个NSString。而另外一个函数NSRangeFromString()则是将NSString转换为NSRange

下面这个例子将从后向前反向搜索字符串:

NSString *homebrew = @"Imperial India Pale Ale (IPA)";

// Search for the "ia" starting at the end of string

NSRange range = [homebrew rangeOfString:@"ia" options:NSBackwardsSearch];

// What did we find

if (range.length > 0)

  NSLog(@"Range is: %@", NSStringFromRange(range));

上面的程序将输出:Range is: {12, 2}

ac

如果你要获取一个字符串或者一个数组中的一个子集,那么使用NSRange会很方便的定义这个子集。

NSRange定义

Declaration: typedef struct _NSRange {

   NSUInteger location;

   NSUInteger length;

} NSRange;

创建NSRange的方法定义

Declaration: NSRange NSMakeRange (

     NSUInteger loc,

     NSUInteger len

  );

例如获取一个数组的一个子集:

        NSRange range = NSMakeRange(0, 5); 

        NSArray *subArray = [self.states subarrayWithRange:range];

这样就获得了这个数组中0开始的5个元素的子集。

当谈到NSString方法时,你会发现许多都涉及到NSRange。不必担心,它其实只不过是一种C语言结构用来帮助描述一系列的条款,包括一个起点位置和一个计数方法。例如,一个行列通过从另一个字符串中摘取一个子字符串的方法是很有效的。你可以对其指定起始位置以及所需的元素数量(下面会向你具体阐述)。

NSRange 定义
关于NSRange的结构,定义如下:
typedef struct_NSRange
{
NSUInteger location;
NSUInteger length;
} NSRange;
location是在行列中的起始位置(基于零点)而length是行列中的条目个数。NSUInteger只是单纯的一个无符号的值,它支持32位和64位系统。下面是有关它的定义:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE ||TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef unsigned long NSUInteger;
#else
typedef unsigned int NSUInteger;
#endif

NSRange和字符串
这个示例告诉了你一个创建行列的方法,通过使用相同的字符串来摘录一个子字符串——输出结果为IPA
NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";
//起始位置为25,获取3个特征值
NSRange range =NSMakeRange (25,3);
//这种方法同样有效
// NSRange行列为{25, 3}
NSLog (@"Beershortname: %@", [homebrewsubstringWithRange:range]);
如果你想要搜寻一个子字符串,你可以通过下列代码:
NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";
NSRange range = [homebrew rangeOfString:@"IPA"];
// Did we find the string "IPA" ? 我们找到字符串"IPA"了么?
if (range.length> 0)
NSLog(@"Range is: %@", NSStringFromRange(range));
输出结果将显示为:Range is: {25, 3}。其中有一点很重要,就是指令NSStringFromRange()将显示传回(一个行列)的值作为一个NSString。同样你还可以通过创建一个字符串的行列得到一个NSRangeFromString()功能。
让我们再看另一个示例,下述代码将从字符串的末尾开始向前搜索“ia”字符串:
NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";
//从末尾开始搜索"ia"字符串
NSRange range = [homebrew rangeOfString:@"ia"options:NSBackwardsSearch];
//判别查找到的字符串是否正确
if (range.length> 0)
NSLog(@"Range is: %@", NSStringFromRange(range));
上述结果将显示为:Range is: {12, 2}(“ia”出现在单词“India”中)

NSRange功能
以下就是在处理行列时,可能需要的一些功能:
NSEqualRanges()
NSIntersectionRange()
NSLocationInRange()
NSMakeRange()
NSMaxRange()
NSRangeFromString()
NSStringFromRange()
NSUnionRange()


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表