你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS中字符串的用法匯總

iOS中字符串的用法匯總

編輯:IOS開發基礎

img (190).jpg

投稿文章,作者:會跳舞的獅子(微博)

這篇文章主要詳細介紹iOS中字符串的各種用法,如果發現不夠完善可以提交意見,主要是方便對字符串的使用的理解,內容比較多但是詳細,如果覺得以後用得著的地方可以先收藏著。

NSString的基本概念 (NSString是不可變字符串)

什麼是NSString?

  • 一個NSString代表一個字符串(文字內容)

  • 一般稱NSString為字符串類

NSString的創建方式 (兩種)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//    [self create1];
    [self create2];
}
/** 第一種創建方式 */
//常量區中的字符串只要內容一致, 不會重復創建
- (void)create1
{
    NSString *str1 = @"lion";
    NSString *str2 = @"lion";
    //輸出地址不一樣
    NSLog(@"\n %p \n %p",&str1,&str2);
}
/** 第二種創建方式 */
//堆區中得字符串哪怕內容一致, 也會重復創建
- (void)create2
{
//stringWithFormat 可以進行拼接
    NSString *str1 = [NSString stringWithFormat:@"lion"];
    NSString *str2 = [NSString stringWithFormat:@"lion"];
    //輸出地址相同
    NSLog(@"\n %p \n %p",str1,str2);
}

NSString的讀寫

讀取:

// 用來保存錯誤信息
NSError *error = nil;
// 讀取文件內容
NSString *str = [NSString stringWithContentsOfFile:@"/Users/LJH/Desktop/Lion.txt" encoding:NSUTF8StringEncoding error:&error];
// 如果有錯誤信息
if (error) {
    NSLog(@"讀取失敗, 錯誤原因是:%@", [error localizedDescription]);
} else { // 如果沒有錯誤信息
    NSLog(@"讀取成功, 文件內容是:\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(@"寫入成功");
}
//注意: 重復寫入同一個文件會覆蓋上一個文件

字符串的比較

NSString的大小寫屬性

  • 全部字符轉為大寫字母

- (NSString *)uppercaseString;
  • 全部字符轉為小寫字母

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

- (NSString *)capitalizedString

NSString的比較

one:

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

two:

- (NSComparisonResult)compare:(NSString *)string;

這個方法可以用來比較兩個字符串內容的大小

比較方法: 逐個字符地進行比較ASCII值,返回NSComparisonResult作為比較結果

NSComparisonResult是一個枚舉,有3個值:

  • 如果左側 > 右側,返回NSOrderedDescending,

  • 如果左側 < 右側,返回NSOrderedAscending,

  • 如果左側 == 右側返回NSOrderedSame

NSString *str1 = @"abc";
NSString *str2 = @"abd";
switch ([str1 compare:str2]) {
    case NSOrderedAscending:
       NSLog(@"後面一個字符串大於前面一個");
       break;
    case NSOrderedDescending:
       NSLog(@"後面一個字符串小於前面一個");
       break;
    case NSOrderedSame:
       NSLog(@"兩個字符串一樣");
       break;
}

輸出結果: 後面一個字符串大於前面一個

three:

- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;

忽略大小寫進行比較,返回值與compare:一致

字符串搜索

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

是否以aString開頭

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

是否以aString結尾

- (NSRange)rangeOfString:(NSString *)aString;

用來檢查字符串內容中是否包含了aString

如果包含, 就返回aString的范圍

如果不包含, NSRange的location為NSNotFound, length為0

NSRange基本概念

NSRange是Foundation框架中比較常用的結構體, 它的定義如下:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;
// NSUInteger的定義
typedef unsigned int NSUInteger;

NSRange用來表示事物的一個范圍,通常是字符串裡的字符范圍或者數組裡的元素范圍

NSRange有2個成員

NSUInteger location : 表示該范圍的起始位置

NSUInteger length : 表示該范圍內的長度

比如@“I Miss You Lion”中的@“Lion”可以用location為11,length為4的范圍來表示

NSRange的創建

有3種方式創建一個NSRange變量

方式1

NSRange range;
range.location = 11;
range.length = 4;

方式2

NSRange range = {11, 4};

或者

NSRange range = {.location = 11,.length = 4};

方式3 : 使用NSMakeRange函數

NSRange range = NSMakeRange(11, 4);

字符串的截取

one:

- (NSString *)substringFromIndex:(NSUInteger)from;

從指定位置from開始(包括指定位置的字符)到尾部

- (void)subFrom
{
    //字符從0開始算
    NSString *str = @"會跳舞的獅子";
    str = [str substringFromIndex:6];
    NSLog(@"str = %@", str);
    //打印結果 str = 會跳舞的獅子
}

two:

- (NSString *)substringToIndex:(NSUInteger)to;

從字符串的開頭一直截取到指定的位置to,但不包括該位置的字符

- (void)subTo
{
    NSString *str = @"會跳舞的獅子";
    str = [str substringToIndex:12];
    NSLog(@"str = %@", str);
    //打印結果 str = 會跳舞的獅子
}

three:

- (NSString *)substringWithRange:(NSRange)range;

按照所給出的NSRange從字符串中截取子串

- (void)subWithRange
{
    NSString *str = @"會跳舞的獅子";
    NSRange range;
    /*
     range.location = 6;
     range.length = 6;
     */
    range.location = [str rangeOfString:@">"].location + 1;
    range.length = [str rangeOfString:@"

字符串的替換

- (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);
    /*
     打印結果
     str =|   http://baidu.com/lion.png   |
     newStr =|http://baidu.com/lion.png|
     */
}

字符串與路徑

  • NSString 與 路徑

one:

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

two:

- (NSString *)lastPathComponent;
獲得最後一個目錄
- (void)lastPathComponent
{
    // 截取最後一個/後面的內容
    NSString *str = @"/Users/LJH/Desktop/Lion.txt";
    NSString *component = [str lastPathComponent];
    NSLog(@"component = %@", component);
}

three:

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

four:

- (NSString *)stringByAppendingPathComponent:(NSString *)str;在路徑的後面拼接一個目錄 (也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串內容)
- (void)stringByAppendingPathComponent
{
    // 其實就是在最後面加上/和要拼接得內容
    // 注意會判斷後面有沒有/有就不添加了, 沒有就添加, 並且如果有多個會替換為1個
    //    NSString *str = @"/Users/NJ-Lee/Desktop";
    NSString *str = @"/Users/LJH/Desktop/";
    NSString *newStr = [str stringByAppendingPathComponent:@"Lion"];
    NSLog(@"newStr = %@", newStr);
    //打印結果:newStr = /Users/LJH/Desktop/Lion
}
  • NSString 與 文件拓展名

- (void)pathExtension
{
one:
- (NSString *)pathExtension;
獲得拓展名
    // 其實就是從最後面開始截取.之後的內容
    //    NSString *str = @"Lion.txt";
    NSString *str = @"abc.Lion.txt";
    NSString *extension = [str pathExtension];
    NSLog(@"extension = %@", extension);
  //打印結果:extension = txt
}
two:
- (NSString *)stringByDeletingPathExtension;
刪除尾部的拓展名
- (void)stringByDeletingPathExtension
{
    // 其實就是上次從最後面開始.之後的內容
    NSString *str = @"love.Lion.txt";
    NSString *newStr = [str stringByDeletingPathExtension];
    NSLog(@"newStr = %@", newStr);
    //打印結果 newStr = love.Lion
}
three:
- (NSString *)stringByAppendingPathExtension:(NSString *)str;
在尾部添加一個拓展名
- (void)stringByAppendingPathExtension
{
    // 其實就是在最後面拼接上.和指定的內容
    NSString *str = @"Lion";
    NSString *newStr = [str stringByAppendingPathExtension:@"png"];
    NSLog(@"newStr = %@", newStr);
    //打印結果:  newStr = Lion.png
}

字符串與基本數據類型的轉換

- (NSUInteger)length;

返回字符串的長度(有多少個文字)

- (unichar)characterAtIndex:(NSUInteger)index;

返回index位置對應的字符

轉為基本數據類型

- (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);

轉為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);
將一個字符串分隔成多個字符串
    // 將一個字符串分隔成多個字符串
    //- (NSArray *)componentsSeparatedByString:(NSString *)separator
- (void)componentsSeparatedByString
{
    // 假如有一個字符串
    NSString *list = @"java,oc,c,swift";
    // 可以用上面的函數得到一個字符串數組:
    NSArray *listItems = [list componentsSeparatedByString:@","];
    // 這個數組就是把原來的字符串用","分割得到的多個字符串:
    //所以如果用這個方法就可以將字符串分隔多個字符串,然後存放到數組裡面,在數組中取出想要的字符串
    NSLog(@"%@",listItems);
    //打印結果見下:
    /*
     2016-05-30 11:09:22.337 NSString的基本使用[1277:56593] (
     java,
     oc,
     c,
     swift
     )
     */
}

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

NSMutableString的基本概念

NSMutableString 類 繼承NSString類,那麼NSString供的方法在NSMutableString中基本都可以使用,NSMutableString好比一個字符串鏈表,它可以任意的動態在字符串中添加字符 串 刪除字符串 指定位置插入字符串,使用它來操作字符串會更加靈活。

NSMutableString和NSString的區別

NSString是不可變的, 裡面的文字內容是不能進行修改的 + NSMutableString是可變的, 裡面的文字內容可以隨時更改

NSMutableString能使用NSString的所有方法

字符串中的可變和不可變

不可變:指的是字符串在內存中占用的存儲空間固定,並且存儲的內容不能發生變化

- (void)str
{
    // 改變了指針的指向, 並沒有修改字符串
    NSString *str = @"lion";
    str = @"Lion";
    // 生成了一個新的字符串, 並沒有修改字符串
    NSString *newStr = [str substringFromIndex:1];
    NSLog(@"str = %@", str);
    NSLog(@"newStr = %@", newStr);
}

可變:指的是字符串在內存中占用的存儲空間可以不固定,並且存儲的內容可以被修改

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

three:

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

four:

- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
  使用aString替換range范圍內的字符串
- (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);
    //打印內容:strM = http://www.baidu.com/super Man.png
}
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved