OC字符串的處理方法

? ? ? ?任何編程語言對字符串的操作是必不可少的垃杖,簡單的字符串處理我們可以借助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]);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末周拐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凰兑,更是在濱河造成了極大的恐慌妥粟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聪黎,死亡現(xiàn)場離奇詭異罕容,居然都是意外死亡,警方通過查閱死者的電腦和手機稿饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門锦秒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喉镰,你說我怎么就攤上這事旅择。” “怎么了侣姆?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵生真,是天一觀的道長。 經(jīng)常有香客問我捺宗,道長柱蟀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任蚜厉,我火速辦了婚禮长已,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己术瓮,他們只是感情好康聂,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胞四,像睡著了一般恬汁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辜伟,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天氓侧,我揣著相機與錄音,去河邊找鬼导狡。 笑死甘苍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的烘豌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼看彼,長吁一口氣:“原來是場噩夢啊……” “哼廊佩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靖榕,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤标锄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茁计,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體料皇,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年星压,在試婚紗的時候發(fā)現(xiàn)自己被綠了践剂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡娜膘,死狀恐怖逊脯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竣贪,我是刑警寧澤军洼,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站演怎,受9級特大地震影響匕争,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爷耀,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一甘桑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦扇住、人聲如沸春缕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锄贼。三九已至,卻和暖如春女阀,著一層夾襖步出監(jiān)牢的瞬間宅荤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工浸策, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冯键,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓庸汗,卻偏偏與公主長得像惫确,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚯舱,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容