? ? ? ?任何編程語言對字符串的操作是必不可少的垃杖,簡單的字符串處理我們可以借助OC中NSString封裝好的字符串處理方法,不過前提是你得了解每個方法如何使用损肛,
1.字符串的創(chuàng)建
字符串的創(chuàng)建有多種方法,下面的例子中給了常用的幾種字符串創(chuàng)建方法(還有好多)
//字符串創(chuàng)建工廠
NSString *str1 = [NSString stringWithFormat:@"%d, %d",1,2];
NSString *str2 = [NSString stringWithString:@"hello"];
NSString *str3 = [NSString stringWithCString:"aaa" encoding:NSUTF8StringEncoding];
//普通方法
NSString *str4 = @"hello";
2.獲取字符串的長度 -(unsigned int) length
NSString *str = @"Hello";
NSUInteger leng= [ str length];
3.字符串的比較 == 比較字符串的指針? isEqualToString 比較字符串的內(nèi)容返回值是BOOL類型
以下來利用字符串的淺拷貝和深拷貝來測試上面的兩個方法
retain:始終是淺復制。引用計數(shù)每次加一雳旅。返回對象是否可變與被復制的對象保持一致。
copy:對于可變對象為深復制间聊,引用計數(shù)不改變;對于不可變對象是淺復制攒盈, 引用計數(shù)每次加一。始終返回一個不可變對象哎榴。
mutableCopy:始終是深復制型豁,引用計數(shù)不改變。始終返回一個可變對象叹话。
?? ? ? 代碼如下:
NSString *string1 = @"hello";
NSString *string2 = [string1 mutableCopy];
NSString *string3 = [string1 copy];
//NSLog(string2);
//NSLog(string3);
//比較指針
if (string1 == string2){
NSLog(@"指針相同");
}
else{
NSLog(@"string1通過深拷貝給string2所以指針不同");
}
//比較指針
if (string1 == string3){
NSLog(@"string1通過淺拷貝給string3所以指針相同");
}
else{
NSLog(@"string1通過深拷貝給string3所以指針不同");
}
//比較內(nèi)容
if ([string1 isEqualToString:string2] == YES){
NSLog(@"string1 和 String2的內(nèi)容相同");
}
else{
NSLog(@"string1 和 String2的內(nèi)容不同");
}
運行結(jié)果:
2014-07-30 20:12:07.796 HelloOC[2073:303] string1通過深拷貝給string2所以指針不同
2014-07-30 20:12:07.796 HelloOC[2073:303] string1通過淺拷貝給string3所以指針相同
2014-07-30 20:12:07.797 HelloOC[2073:303] string1 和 String2的內(nèi)容相同
4.字符串的比較函數(shù)compare,
?? ? ?? ? ?? ? ?NSString下面的compare函數(shù)的返回值是一個枚舉類型NSComparisonResult;? NSOrderedAscending=-1, NSOrderedSame=0,NSOrderedDescending = 1 ; ?? ? ?? ? ?? ? ?? ? ?對compare進行重載偷遗,可以傳入option參數(shù), 1 代表不區(qū)分大小寫驼壶,2代表區(qū)分大小寫氏豌,64代表比較字符串的個數(shù)而不是字符串的值。
//字符串比較函數(shù)compare
NSString *strCompare1 = @"abcde";
NSString *strCompare2 = @"bcdef";
//compare的返回類型是NSComparisonResult
NSComparisonResult result = [strCompare1 compare:strCompare2];
switch (result) {
case NSOrderedAscending:
NSLog(@"升序(str1 < str2)");
break;
case NSOrderedSame:
NSLog(@"兩個字符串相等");
break;
case NSOrderedDescending:
NSLog(@"降序(str1 > str2)");
break;
default:
NSLog(@"別的情況热凹!");
break;
}
??5.字符串的拼接函數(shù) stringByAppendingString : (NSString *) aString;? 和 stringByAppendingFormat : (NSString *) format ...;
?? ? ?? ? ?下面是對上面兩個函數(shù)的測試:
NSString *append1 = @"I love ";
NSString *append2 = @"china";
//用stringByAppendingString來進行字符串的拼接
append1 = [append1 stringByAppendingString:append2];
NSLog(append1);
//用stringByAppendingFormat來進行字符串的拼接
append1 = [append1 stringByAppendingFormat:@" iPhone%dS",6];
NSLog(append1);
?6.字符串的查找
?? ? ?-(BOOL) hasPrefix : (NSString *) string: 判斷一個字符串是否是以string開頭泵喘;
?? ? ?-(BOOL) hasSuffix : (NSString *) string: 判斷一個字符串是否是以string結(jié)尾泪电;
?? ? ?-(NSRange) rangeOfString:(NSString *) string; 模式匹配字符串,返回類型是結(jié)構(gòu)體NSRange, 結(jié)構(gòu)體 NSRange里有兩個值都是整型的纪铺,location代表子字符串在
?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?原有字符串中的位置相速,length代表長度。
//字符串的查找
NSString *parent = @"123456789";
NSString *pre = @"123";
NSString *suf = @"789";
NSString *mid =@"456";
//匹配開頭
if ([parent hasPrefix:pre] == YES) {
NSLog(@"匹配成功");
}
//匹配結(jié)尾
if ([parent hasSuffix:suf] == YES) {
NSLog(@"匹配成功");
}
//從中間匹配
NSRange range = [parent rangeOfString:mid];
NSLog(@"location = %d,? length = %d", range.location, range.length);
?運行結(jié)果:
2014-07-31 16:20:56.786 HelloOC[1710:303] 匹配成功
2014-07-31 16:20:56.786 HelloOC[1710:303] 匹配成功
2014-07-31 16:20:56.787 HelloOC[1710:303] location = 3,? length = 3
?7.字符串的截取
?? ? -(NSString *) substringFromIndex : (NSUInteger) from 獲取從字符串的開頭到字符串結(jié)尾的字符串內(nèi)容鲜锚,不包含from位置的字符突诬。
?? ? ?-(NSString *)substringToIndex : (NSUInterger) to? 獲取從字符串開頭到字符串的to位置的字符串內(nèi)容,包含to位置的字符芜繁;
?? ? ?-(NSString *) substringWithRange:(NSRange) range 根據(jù)NSRange這個范圍來獲取字符串旺隙;
?? ? ?事例代碼如下:
//字符串的截取
NSString *parent = @"123456789";
//從一個位置截取字符串到結(jié)尾:可以從零開始
NSString *toEnd = [parent substringFromIndex:6];
NSLog(toEnd);
//從一個開頭然后到傳入的值
NSString *fromBegin = [parent substringToIndex:3];
NSLog(fromBegin);
//從一個位置截取指定長度
NSRange range = {3,3};
NSString *rangString = [parent substringWithRange:range];
NSLog(rangString);
?運行結(jié)果如下:
2014-07-31 16:40:20.994 HelloOC[1813:303] 789
2014-07-31 16:40:20.994 HelloOC[1813:303] 123
2014-07-31 16:40:20.995 HelloOC[1813:303] 456
?8.字符串中的類型轉(zhuǎn)換函數(shù)
?? ? ?-(double) doubleValue; 把字符串的內(nèi)容轉(zhuǎn)換為double類型
?? ? ?-(float) floatValue; 把相應(yīng)的字符串轉(zhuǎn)換為float類型
?? ? ?-(int) intValue;把相應(yīng)的字符串轉(zhuǎn)換為int類型
//字符串的類型轉(zhuǎn)換
NSString *test = @"1234.123456789";
//轉(zhuǎn)換為整數(shù)
int strToInt = [test intValue];
NSLog(@"strToInt = %d", strToInt);
//轉(zhuǎn)換為float
float strToFloat = [test floatValue];
NSLog(@"strToFloat = %.9f", strToFloat);
//轉(zhuǎn)換為double
double strToDouble = [test doubleValue];
NSLog(@"strToDouble = %.9f", strToDouble);
?運行結(jié)果:
2014-07-31 16:56:27.043 HelloOC[1914:303] strToInt = 1234
2014-07-31 16:56:27.044 HelloOC[1914:303] strToFloat = 1234.123413086
2014-07-31 16:56:27.044 HelloOC[1914:303] strToDouble = 1234.123456789
?9.字符串大小寫轉(zhuǎn)換函數(shù)
?-(NSString *)uppercaseString : 將字符全改成大寫的;
?-(NSString *)lowercaseString : 將字符全改成小寫的骏令;
?-(NSString *)capitalizedString : 將首字母進行大寫蔬捷;
?代碼事例:
//字符串的大小寫轉(zhuǎn)換
NSString *string = @"hello world";
//轉(zhuǎn)換為大寫
NSString *upper = [string uppercaseString];
NSLog(upper);
//轉(zhuǎn)換為小寫
NSString *lower = [upper lowercaseString];
NSLog(lower);
//首字母大寫
NSString *begin = [upper capitalizedString];
?? ? ?運行結(jié)果:
2014-07-31 17:07:11.134 HelloOC[1961:303] HELLO WORLD
2014-07-31 17:07:11.134 HelloOC[1961:303] hello world
2014-07-31 17:07:11.134 HelloOC[1961:303] Hello World
10.字符串替換函數(shù)
-(NSString *)stringByReplacingOccurrencesOfString: (NSString *) target? withString : (NSString *) replacement; 把字符串target轉(zhuǎn)換為replacement
?? ? ?-(NSString *)stringByReplacingCharactersInRange : (NSRange) range withString : (NSString *) replacement; 把指定范圍內(nèi)的字符串進行替換;
?? ? ?-(NSArray *) componentsSeparatedByString:(NSString *) separator:以字符串中的某個字符進行分割榔袋,返回數(shù)組對象
測試代碼如下
//字符串替換函數(shù)
NSString *string = @"abc,def,g";
//將字符串中特定的字符串換成指定的字符串
NSString *after = [string stringByReplacingOccurrencesOfString:@"a" withString:@"zzzzzz"];
NSLog(after);
//將range范圍內(nèi)的字符串替換為相應(yīng)的字符串
NSRange range = {0,6}; //從1開始到第6個
NSString *rangeString = [after? stringByReplacingCharactersInRange:range withString:@"a"];
NSLog(rangeString);
//分割字符串,把分割完的字符串存入數(shù)組中
NSArray *split = [string componentsSeparatedByString:@","];
for (int i = 0; i < [split count]; i++) {
NSLog(@"%@", [split objectAtIndex:i]);
}