來自網(wǎng)絡(luò),為自己好記保存下,希望對(duì)你也有用!
NSRange的定義
typedef struct _NSRange
{
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange是一個(gè)結(jié)構(gòu)體,其中l(wèi)ocation是一個(gè)以0為開始的index,length是表示對(duì)象的長(zhǎng)度。他們都是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
例子:
下面這個(gè)例子,將輸出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));
上面的程序?qū)⑤敵鯮ange is: {25, 3}。NSStringFromRange()方法,將一個(gè)NSRange返回一個(gè)NSString。而另外一個(gè)函數(shù)NSRangeFromString()則是將NSString轉(zhuǎn)換為NSRange
下面這個(gè)例子將從后向前反向搜索字符串:
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));
上面的程序?qū)⑤敵觯篟ange is: {12, 2}
ac
如果你要獲取一個(gè)字符串或者一個(gè)數(shù)組中的一個(gè)子集,那么使用NSRange會(huì)很方便的定義這個(gè)子集。
NSRange定義
Declaration: typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
創(chuàng)建NSRange的方法定義
Declaration: NSRange NSMakeRange (
NSUInteger loc,
NSUInteger len
);
例如獲取一個(gè)數(shù)組的一個(gè)子集:
NSRange range = NSMakeRange(0, 5);
NSArray *subArray = [self.states subarrayWithRange:range];
這樣就獲得了這個(gè)數(shù)組中0開始的5個(gè)元素的子集。
當(dāng)談到NSString方法時(shí),你會(huì)發(fā)現(xiàn)許多都涉及到NSRange。不必?fù)?dān)心,它其實(shí)只不過是一種C語言結(jié)構(gòu)用來幫助描述一系列的條款,包括一個(gè)起點(diǎn)位置和一個(gè)計(jì)數(shù)方法。例如,一個(gè)行列通過從另一個(gè)字符串中摘取一個(gè)子字符串的方法是很有效的。你可以對(duì)其指定起始位置以及所需的元素?cái)?shù)量(下面會(huì)向你具體闡述)。
NSRange 定義
關(guān)于NSRange的結(jié)構(gòu),定義如下:
typedef struct_NSRange
{
NSUInteger location;
NSUInteger length;
} NSRange;
location是在行列中的起始位置(基于零點(diǎn))而length是行列中的條目個(gè)數(shù)。NSUInteger只是單純的一個(gè)無符號(hào)的值,它支持32位和64位系統(tǒng)。下面是有關(guān)它的定義:
#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和字符串
這個(gè)示例告訴了你一個(gè)創(chuàng)建行列的方法,通過使用相同的字符串來摘錄一個(gè)子字符串——輸出結(jié)果為IPA
NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";
//起始位置為25,獲取3個(gè)特征值
NSRange range =NSMakeRange (25,3);
//這種方法同樣有效
// NSRange行列為{25, 3}
NSLog (@"Beershortname: %@", [homebrewsubstringWithRange:range]);
如果你想要搜尋一個(gè)子字符串,你可以通過下列代碼:
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));
輸出結(jié)果將顯示為:Range is: {25, 3}。其中有一點(diǎn)很重要,就是指令NSStringFromRange()將顯示傳回(一個(gè)行列)的值作為一個(gè)NSString。同樣你還可以通過創(chuàng)建一個(gè)字符串的行列得到一個(gè)NSRangeFromString()功能。
讓我們?cè)倏戳硪粋€(gè)示例,下述代碼將從字符串的末尾開始向前搜索“ia”字符串:
NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";
//從末尾開始搜索"ia"字符串
NSRange range = [homebrew rangeOfString:@"ia"options:NSBackwardsSearch];
//判別查找到的字符串是否正確
if (range.length> 0)
NSLog(@"Range is: %@", NSStringFromRange(range));
上述結(jié)果將顯示為:Range is: {12, 2}(“ia”出現(xiàn)在單詞“India”中)
NSRange功能
以下就是在處理行列時(shí),可能需要的一些功能:
NSEqualRanges()
NSIntersectionRange()
NSLocationInRange()
NSMakeRange()
NSMaxRange()
NSRangeFromString()
NSStringFromRange()
NSUnionRange()
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注