iOS技術(shù)文檔No.17 AppKit_NSString(一 基礎(chǔ)用法)

NSString的創(chuàng)建方式 (兩種)

/** 第一種創(chuàng)建方式 */
//常量區(qū)中的字符串只要內(nèi)容一致, 不會(huì)重復(fù)創(chuàng)建
- (void)create1
{
    NSString *str1 = @"lion";
    NSString *str2 = @"lion";
    //輸出地址不一樣
    NSLog(@"\n %p \n %p",&str1,&str2);
}
/** 第二種創(chuàng)建方式 */
//堆區(qū)中得字符串哪怕內(nèi)容一致, 也會(huì)重復(fù)創(chuàng)建
- (void)create2
{
//stringWithFormat 可以進(jìn)行拼接
    NSString *str1 = [NSString stringWithFormat:@"lion"];
    NSString *str2 = [NSString stringWithFormat:@"lion"];
    //輸出地址相同
    NSLog(@"\n %p \n %p",str1,str2);

}

NSString的讀寫

讀取:

// 用來保存錯(cuò)誤信息
NSError *error = nil;

// 讀取文件內(nèi)容
NSString *str = [NSString stringWithContentsOfFile:@"/Users/LJH/Desktop/Lion.txt" encoding:NSUTF8StringEncoding error:&error];

// 如果有錯(cuò)誤信息
if (error) {
    NSLog(@"讀取失敗, 錯(cuò)誤原因是:%@", [error localizedDescription]);
} else { // 如果沒有錯(cuò)誤信息
    NSLog(@"讀取成功, 文件內(nèi)容是:\n%@", str);
}

寫入:

// writeToFile 寫入
NSString *str = @"Lion";
BOOL flag = [str writeToFile:@"/Users/LJH/Desktop/Lion.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (flag == 1)
{
    NSLog(@"寫入成功");
}
//注意: 重復(fù)寫入同一個(gè)文件會(huì)覆蓋上一個(gè)文件

字符串的比較

NSString的大小寫屬性

全部字符轉(zhuǎn)為大寫字母
- (NSString *)uppercaseString;

全部字符轉(zhuǎn)為小寫字母
- (NSString *)lowercaseString

首字母變大寫,其他字母都變小寫
- (NSString *)capitalizedString

NSString的比較
one:

- (BOOL)isEqualToString:(NSString *)aString;
兩個(gè)字符串的內(nèi)容相同就返回YES, 否則返回NO
    NSString *str1 = @"lion";
    NSString *str2 = [NSString stringWithFormat:@"lion"];
    if ([str1 isEqualToString:str2]) {
        NSLog(@"字符串內(nèi)容一樣");
    }

    if (str1 == str2) {
        NSLog(@"字符串地址一樣");
    }

two:

- (NSComparisonResult)compare:(NSString *)string;
這個(gè)方法可以用來比較兩個(gè)字符串內(nèi)容的大小
比較方法: 逐個(gè)字符地進(jìn)行比較ASCII值确封,返回NSComparisonResult作為比較結(jié)果
NSComparisonResult是一個(gè)枚舉肢专,有3個(gè)值:
如果左側(cè) > 右側(cè),返回NSOrderedDescending,
如果左側(cè) < 右側(cè),返回NSOrderedAscending,
如果左側(cè) == 右側(cè)返回NSOrderedSame
    NSString *str1 = @"abc";
    NSString *str2 = @"abd";
    switch ([str1 compare:str2]) {
        case NSOrderedAscending:
            NSLog(@"后面一個(gè)字符串大于前面一個(gè)");
            break;
        case NSOrderedDescending:
            NSLog(@"后面一個(gè)字符串小于前面一個(gè)");
            break;
        case NSOrderedSame:
            NSLog(@"兩個(gè)字符串一樣");
            break;
    }
    輸出結(jié)果: 后面一個(gè)字符串大于前面一個(gè)

three:

- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
忽略大小寫進(jìn)行比較话瞧,返回值與compare:一致

字符串搜索

- (BOOL)hasPrefix:(NSString *)aString;

是否以aString開頭
- (BOOL)hasSuffix:(NSString *)aString;

是否以aString結(jié)尾
- (NSRange)rangeOfString:(NSString *)aString;

用來檢查字符串內(nèi)容中是否包含了aString
如果包含, 就返回aString的范圍
如果不包含, NSRange的location為NSNotFound, length為0

NSRange基本概念

NSRange是Foundation框架中比較常用的結(jié)構(gòu)體, 它的定義如下:
typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;
// NSUInteger的定義
typedef unsigned int NSUInteger;
NSRange用來表示事物的一個(gè)范圍,通常是字符串里的字符范圍或者數(shù)組里的元素范圍

NSRange有2個(gè)成員

NSUInteger location : 表示該范圍的起始位置
NSUInteger length : 表示該范圍內(nèi)的長(zhǎng)度
比如@“I Miss You Lion”中的@“Lion”可以用location為11,length為4的范圍來表示

NSRange的創(chuàng)建

有3種方式創(chuàng)建一個(gè)NSRange變量
方式1
NSRange range;
range.location = 11;
range.length = 4;
方式2
NSRange range = {11, 4};
或者
NSRange range = {.location = 11,.length = 4};
方式3 : 使用NSMakeRange函數(shù)
NSRange range = NSMakeRange(11, 4);

字符串的截取

one:
- (NSString *)substringFromIndex:(NSUInteger)from;
從指定位置from開始(包括指定位置的字符)到尾部
- (void)subFrom
{
    //字符從0開始算
    NSString *str = @"<head>會(huì)跳舞的獅子</head>";
    str = [str substringFromIndex:6];
    NSLog(@"str = %@", str);
    //打印結(jié)果 str = 會(huì)跳舞的獅子</head>
}

two:
- (NSString *)substringToIndex:(NSUInteger)to;
從字符串的開頭一直截取到指定的位置to举反,但不包括該位置的字符
- (void)subTo
{
    NSString *str = @"<head>會(huì)跳舞的獅子</head>";
    str = [str substringToIndex:12];
    NSLog(@"str = %@", str);
    //打印結(jié)果 str = <head>會(huì)跳舞的獅子
}

three:
- (NSString *)substringWithRange:(NSRange)range;
按照所給出的NSRange從字符串中截取子串
- (void)subWithRange
{
    NSString *str = @"<head>會(huì)跳舞的獅子</head>";
    NSRange range;
    /*
     range.location = 6;
     range.length = 6;
     */
    range.location = [str rangeOfString:@">"].location + 1;
    range.length = [str rangeOfString:@"</"].location - range.location;
    NSString *result = [str substringWithRange:range];
    NSLog(@"result = %@", result);
    //打印結(jié)果   會(huì)跳舞的獅子
}

字符串的替換

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
用replacement替換target
- (void)Replacing
{
    NSString *str = @"http:**www.baidu.com*lion.png";
    NSString *newStr = [str stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
    NSLog(@"newStr = %@", newStr);

}


- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
去除首尾
- (void)Trimming
{
    NSString *str =  @"   http://baidu.com/lion.png   ";
    //去除首尾的空格
    NSString *newStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSLog(@"str =|%@|", str);
    NSLog(@"newStr =|%@|", newStr);
    /*
     打印結(jié)果
     str =|   http://baidu.com/lion.png   |
     newStr =|http://baidu.com/lion.png|
     */

}

字符串與路徑

NSString 與 路徑

one:
- (BOOL)isAbsolutePath;
是否為絕對(duì)路徑
- (void)isAbsolutePath
{
    // 其實(shí)就是判斷是否以/開頭
    NSString *str = @"/Users/LJH/Desktop/Lion.txt";
    NSString *str = @"Users/LJH/Desktop/Lion.txt";
    if ([str isAbsolutePath]) {
        NSLog(@"是絕對(duì)路徑");
    }else
    {
        NSLog(@"不是絕對(duì)路徑");
    }
}

two:
- (NSString *)lastPathComponent;
獲得最后一個(gè)目錄
- (void)lastPathComponent
{

    // 截取最后一個(gè)/后面的內(nèi)容
    NSString *str = @"/Users/LJH/Desktop/Lion.txt";
    NSString *component = [str lastPathComponent];
    NSLog(@"component = %@", component);
}

three:
- (NSString *)stringByDeletingLastPathComponent;
刪除最后一個(gè)目錄
- (void)stringByDeletingLastPathComponent
{
    // 其實(shí)就是上次最后一個(gè)/和之后的內(nèi)容
    NSString *str = @"/Users/LJH/Desktop/Lion.txt";
    NSString *newStr = [str stringByDeletingLastPathComponent];
    NSLog(@"newStr = %@", newStr);
    //打印結(jié)果:newStr = /Users/LJH/Desktop
}

four:
- (NSString *)stringByAppendingPathComponent:(NSString *)str;在路徑的后面拼接一個(gè)目錄 (也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串內(nèi)容)
- (void)stringByAppendingPathComponent
{
    // 其實(shí)就是在最后面加上/和要拼接得內(nèi)容
    // 注意會(huì)判斷后面有沒有/有就不添加了, 沒有就添加, 并且如果有多個(gè)會(huì)替換為1個(gè)
    //    NSString *str = @"/Users/NJ-Lee/Desktop";
    NSString *str = @"/Users/LJH/Desktop/";
    NSString *newStr = [str stringByAppendingPathComponent:@"Lion"];
    NSLog(@"newStr = %@", newStr);
    //打印結(jié)果:newStr = /Users/LJH/Desktop/Lion
}

NSString 與 文件拓展名

- (void)pathExtension
{
one:
- (NSString *)pathExtension;
獲得拓展名
    // 其實(shí)就是從最后面開始截取.之后的內(nèi)容
    //    NSString *str = @"Lion.txt";
    NSString *str = @"abc.Lion.txt";
    NSString *extension = [str pathExtension];
    NSLog(@"extension = %@", extension);
  //打印結(jié)果:extension = txt
}

two:
- (NSString *)stringByDeletingPathExtension;
刪除尾部的拓展名
- (void)stringByDeletingPathExtension
{
    // 其實(shí)就是上次從最后面開始.之后的內(nèi)容
    NSString *str = @"love.Lion.txt";
    NSString *newStr = [str stringByDeletingPathExtension];
    NSLog(@"newStr = %@", newStr);
    //打印結(jié)果 newStr = love.Lion

}

three:
- (NSString *)stringByAppendingPathExtension:(NSString *)str;
在尾部添加一個(gè)拓展名
- (void)stringByAppendingPathExtension
{
    // 其實(shí)就是在最后面拼接上.和指定的內(nèi)容
    NSString *str = @"Lion";
    NSString *newStr = [str stringByAppendingPathExtension:@"png"];
    NSLog(@"newStr = %@", newStr);
    //打印結(jié)果:  newStr = Lion.png
}

字符串與基本數(shù)據(jù)類型的轉(zhuǎn)換

- (NSUInteger)length;
返回字符串的長(zhǎng)度(有多少個(gè)文字)

- (unichar)characterAtIndex:(NSUInteger)index;
返回index位置對(duì)應(yīng)的字符


轉(zhuǎn)為基本數(shù)據(jù)類型
- (double)doubleValue;
- (float)floatValue;
- (int)intValue;
    NSString *str1 = @"22";
    NSString *str2 = @"22";
    int res = str1.intValue + str2.intValue;
    NSLog(@"res = %i", res);

    NSString *str1 = @"22";
    NSString *str2 = @"22.2";
    double res = str1.doubleValue + str2.doubleValue;
    NSLog(@"res = %f", res);

轉(zhuǎn)為C語言中的字符串
- (char *)UTF8String;
    NSString *str = @"love";
    const char *cStr = [str UTF8String];
    NSLog(@"cStr = %s", cStr);

    char *cStr = "love";
    NSString *str = [NSString stringWithUTF8String:cStr];
    NSLog(@"str = %@", str);

將一個(gè)字符串分隔成多個(gè)字符串

// 將一個(gè)字符串分隔成多個(gè)字符串
    //- (NSArray *)componentsSeparatedByString:(NSString *)separator
- (void)componentsSeparatedByString
{
    // 假如有一個(gè)字符串
    NSString *list = @"java,oc,c,swift";

    // 可以用上面的函數(shù)得到一個(gè)字符串?dāng)?shù)組: 
    NSArray *listItems = [list componentsSeparatedByString:@","];
    // 這個(gè)數(shù)組就是把原來的字符串用","分割得到的多個(gè)字符串:
    //所以如果用這個(gè)方法就可以將字符串分隔多個(gè)字符串,然后存放到數(shù)組里面,在數(shù)組中取出想要的字符串
    NSLog(@"%@",listItems);
    //打印結(jié)果見下:
    /*
     2016-05-30 11:09:22.337 NSString的基本使用[1277:56593] (
     java,
     oc,
     c,
     swift
     )

     */
}

NSMutableString的用法 (NSMutableString是可變字符串)

NSMutableString的基本概念

NSMutableString 類 繼承NSString類,那么NSString ??供的方法在NSMutableString中基本都可以使用,NSMutableString好比一個(gè)字符串鏈表,它可以任意的動(dòng)態(tài)在字符串中添加字符 串 刪除字符串 指定位置插入字符串,使用它來操作字符串會(huì)更加靈活蹂匹。
NSMutableString和NSString的區(qū)別
NSString是不可變的, 里面的文字內(nèi)容是不能進(jìn)行修改的 + NSMutableString是可變的, 里面的文字內(nèi)容可以隨時(shí)更改
NSMutableString能使用NSString的所有方法

字符串中的可變和不可變

不可變:指的是字符串在內(nèi)存中占用的存儲(chǔ)空間固定,并且存儲(chǔ)的內(nèi)容不能發(fā)生變化
- (void)str
{
    // 改變了指針的指向, 并沒有修改字符串
    NSString *str = @"lion";
    str = @"Lion";

    // 生成了一個(gè)新的字符串, 并沒有修改字符串
    NSString *newStr = [str substringFromIndex:1];
    NSLog(@"str = %@", str);
    NSLog(@"newStr = %@", newStr);

}



可變:指的是字符串在內(nèi)存中占用的存儲(chǔ)空間可以不固定,并且存儲(chǔ)的內(nèi)容可以被修改
- (void)strM
{
    //可變的不能賦值給不可變的
    //只有不可變的才能賦值給可變的
    NSString *str = nil;
    NSMutableString *strM = [NSMutableString string];
    NSLog(@"strM = %@", strM);
    // 修改原有字符串, 沒有生成新的字符串
    [strM appendString:@"Lion"];
    NSLog(@"strM = %@", strM);
    [strM appendString:@" love you "];
    NSLog(@"strM = %@", strM);
    str = strM;
    NSLog(@"str = %@",str);
}

NSMutableString常用方法

one:
- (void)appendString:(NSString *)aString;
拼接aString到最后面
- (void)appendFormat:(NSString *)format, ...;
拼接一段格式化字符串到最后面
- (void)appendStrM
{
    NSMutableString *strM = [NSMutableString string];
    NSLog(@"strM = %@", strM);
    [strM appendString:@"Lion"];
    NSLog(@"strM = %@", strM);

}

two:

- (void)deleteCharactersInRange:(NSRange)range;
 刪除range范圍內(nèi)的字符串
- (void)deleteCharactersInRange
{
    NSMutableString *strM = [NSMutableString stringWithString:@"http://www.baidu.com"];
    // 一般情況下利用rangeOfString和deleteCharactersInRange配合刪除指定內(nèi)容
    NSRange range = [strM rangeOfString:@"http://"];
    [strM deleteCharactersInRange:range];
    NSLog(@"strM = %@", strM);
    //打印內(nèi)容: strM = www.baidu.com

}

three:
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
在loc這個(gè)位置中插入aString
- (void)insertString
{
    NSMutableString *strM = [NSMutableString stringWithString:@"www.baidu.com"];
    [strM insertString:@"http://" atIndex:0];
    NSLog(@"strM = %@", strM);
    //打印內(nèi)容: strM = http://www.baidu.com

}



four:
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
  使用aString替換range范圍內(nèi)的字符串

- (void)replaceOccurrencesOfString
{
    NSMutableString *strM = [NSMutableString stringWithString:@"http://www.baidu.com/lion.png"];
    NSRange range = [strM rangeOfString:@"lion"];
    [strM replaceOccurrencesOfString:@"lion" withString:@"super Man" options:0 range:range];
    NSLog(@"strM = %@", strM);
    //打印內(nèi)容:strM = http://www.baidu.com/super Man.png

}

文明轉(zhuǎn)帖岛都,原帖出處:http://www.reibang.com/p/60229365c5c3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末风瘦,一起剝皮案震驚了整個(gè)濱河市队魏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌万搔,老刑警劉巖胡桨,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瞬雹,居然都是意外死亡昧谊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門酗捌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呢诬,“玉大人,你說我怎么就攤上這事胖缤∩辛” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵哪廓,是天一觀的道長(zhǎng)钓猬。 經(jīng)常有香客問我,道長(zhǎng)撩独,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任账月,我火速辦了婚禮综膀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘局齿。我一直安慰自己剧劝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布抓歼。 她就那樣靜靜地躺著讥此,像睡著了一般拢锹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萄喳,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天卒稳,我揣著相機(jī)與錄音,去河邊找鬼他巨。 笑死充坑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的染突。 我是一名探鬼主播捻爷,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼份企!你這毒婦竟也來了也榄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤司志,失蹤者是張志新(化名)和其女友劉穎甜紫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俐芯,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棵介,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吧史。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邮辽。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贸营,靈堂內(nèi)的尸體忽然破棺而出吨述,到底是詐尸還是另有隱情,我是刑警寧澤钞脂,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布揣云,位于F島的核電站,受9級(jí)特大地震影響冰啃,放射性物質(zhì)發(fā)生泄漏邓夕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一阎毅、第九天 我趴在偏房一處隱蔽的房頂上張望焚刚。 院中可真熱鬧,春花似錦扇调、人聲如沸矿咕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碳柱。三九已至捡絮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莲镣,已是汗流浹背福稳。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剥悟,地道東北人灵寺。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像区岗,于是被迫代替她去往敵國(guó)和親略板。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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