Objective-C精選字符串處理方法

        不管是什麼編程語言對字符串的操做是少不了的,對複雜的字符串的分析和操做咱們能夠用正則表達式來達到咱們的目的。簡單的字符串處理咱們能夠藉助OC中NSString封裝好的字符串處理方法,不過前提是你得了解每一個方法如何使用,如下作了一個簡單的總結,便於之後使用。如下事例是原創代碼,轉載請註明出處。正則表達式

 

        1.字符串的建立編程

        字符串的建立有多種方法,下面的例子中給了經常使用的幾種字符串建立方法(還有好多)api

1
2
3
4
5
6
     //字符串建立工廠
     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數組

1
2
NSString *str = @ "Hello" ;
NSUInteger leng= [ str length];

 

        3.字符串的比較 == 比較字符串的指針   isEqualToString 比較字符串的內容返回值是BOOL類型app

        如下來利用字符串的淺拷貝和深拷貝來測試上面的兩個方法編程語言

 

         retain:始終是淺複製。引用計數每次加一。返回對象是否可變與被複制的對象保持一致。函數

         copy:對於可變對象爲深複製,引用計數不改變;對於不可變對象是淺複製, 引用計數每次加一。始終返回一個不可變對象。  測試

         mutableCopy:始終是深複製,引用計數不改變。始終返回一個可變對象。spa

      

    ​    ​ 代碼以下:指針

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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因此指針不一樣" );
}
//比較內容
if  ([string1 isEqualToString:string2] == YES)
{
     NSLog(@ "string1 和 String2的內容相同" );
}
else
{
     NSLog(@ "string1 和 String2的內容不一樣" );
}

 

        運行結果:

1
2
3
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的內容相同

 

 

        4.字符串的比較函數compare,

    ​    ​    ​    ​NSString下面的compare函數的返回值是一個枚舉類型NSComparisonResult;   NSOrderedAscending=-1, NSOrderedSame=0,NSOrderedDescending = 1 ; ​    ​    ​    ​    ​對compare進行重載,能夠傳入option參數, 1 表明不區分大小寫,2表明區分大小寫,64表明比較字符串的個數而不是字符串的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//字符串比較函數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.字符串的拼接函數 stringByAppendingString : (NSString *) aString;  和 stringByAppendingFormat : (NSString *) format ...;

    ​    ​    ​下面是對上面兩個函數的測試:

1
2
3
4
5
6
7
8
9
10
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結尾;

    ​    ​-(NSRange) rangeOfString:(NSString *) string; 模式匹配字符串,返回類型是結構體NSRange, 結構體 NSRange裏有兩個值都是整型的,location表明子字符串在

    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​原有字符串中的位置,length表明長度。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//字符串的查找
NSString *parent = @ "123456789" ;
NSString *pre = @ "123" ;
NSString *suf = @ "789" ;
NSString *mid =@ "456" ;
//匹配開頭
if  ([parent hasPrefix:pre] == YES) {
     NSLog(@ "匹配成功" );
}
//匹配結尾
if  ([parent hasSuffix:suf] == YES) {
     NSLog(@ "匹配成功" );
}
//從中間匹配
NSRange range = [parent rangeOfString:mid];
NSLog(@ "location = %d,  length = %d" , range.location, range.length);

 

    ​運行結果:

1
2
3
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 獲取從字符串的開頭到字符串結尾的字符串內容,不包含from位置的字符。

    ​    ​-(NSString *)substringToIndex : (NSUInterger) to  獲取從字符串開頭到字符串的to位置的字符串內容,包含to位置的字符;

    ​    ​-(NSString *) substringWithRange:(NSRange) range 根據NSRange這個範圍來獲取字符串;

    ​    ​事例代碼以下:

    ​    ​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//字符串的截取
NSString *parent = @ "123456789" ;
//從一個位置截取字符串到結尾:能夠從零開始
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);

    ​

    ​運行結果以下:

1
2
3
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.字符串中的類型轉換函數

    ​    ​-(double) doubleValue; 把字符串的內容轉換爲double類型

    ​    ​-(float) floatValue; 把相應的字符串轉換爲float類型

    ​    ​-(int) intValue;把相應的字符串轉換爲int類型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//字符串的類型轉換
NSString *test = @ "1234.123456789" ;
 
//轉換爲整數
int  strToInt = [test intValue];
NSLog(@ "strToInt = %d" , strToInt);
 
//轉換爲float
float  strToFloat = [test floatValue];
NSLog(@ "strToFloat = %.9f" , strToFloat);
 
//轉換爲double
double  strToDouble = [test doubleValue];
NSLog(@ "strToDouble = %.9f" , strToDouble);

 

    ​運行結果:

1
2
3
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.字符串大小寫轉換函數

    ​-(NSString *)uppercaseString : 將字符全改爲大寫的;

    ​-(NSString *)lowercaseString : 將字符全改爲小寫的;

    ​-(NSString *)capitalizedString : 將首字母進行大寫;

        ​代碼事例:

1
2
3
4
5
6
7
8
9
10
11
12
13
//字符串的大小寫轉換
NSString *string = @ "hello world" ;
 
//轉換爲大寫
NSString *upper = [string uppercaseString];
NSLog(upper);
 
//轉換爲小寫
NSString *lower = [upper lowercaseString];
NSLog(lower);
 
//首字母大寫
NSString *begin = [upper capitalizedString];

 

    ​    ​運行結果:

1
2
3
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.字符串替換函數

        -(NSString *)stringByReplacingOccurrencesOfString: (NSString *) target  withString : (NSString *) replacement; 把字符串target轉換爲replacement

    ​    ​-(NSString *)stringByReplacingCharactersInRange : (NSRange) range withString : (NSString *) replacement; 把指定範圍內的字符串進行替換;

    ​    ​-(NSArray *) componentsSeparatedByString:(NSString *) separator:以字符串中的某個字符進行分割,返回數組對象

        測試代碼以下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//字符串替換函數
NSString *string = @ "abc,def,g" ;
 
//將字符串中特定的字符串換成指定的字符串
NSString *after = [string stringByReplacingOccurrencesOfString:@ "a"  withString:@ "zzzzzz" ];
NSLog(after);
 
//將range範圍內的字符串替換爲相應的字符串
NSRange range = {0,6};  //從1開始到第6個
NSString *rangeString = [after  stringByReplacingCharactersInRange:range withString:@ "a" ];
NSLog(rangeString);
 
//分割字符串,把分割完的字符串存入數組中
NSArray *split = [string componentsSeparatedByString:@ "," ];
 
for  ( int  i = 0; i < [split count]; i++) {
     NSLog(@ "%@" , [split objectAtIndex:i]);
}
相關文章
相關標籤/搜索