NSString总结

[from]http://www.jianshu.com/p/7994b0ad6b88

问题:NSString到底是不是字符串?

NSString 是 OC中专门处理字符串的对象!提供了转换大小写,拼接字符串,lastPathComponent等方法!

一.NSString : 不可变字符串

1.字符串的创建

// 创建一个新的空字符串
NSString *string1 = [NSString string];
 // C语言字符串
char *name = "hello word";
  // 初始化一个字符串,在赋值
 NSString *string2 = [[NSString alloc] init];
 string2 = @"wangchong";
 NSString *string3 = @"hello";
 // 一下两个方法是把字符串做一次拷贝,返回拷贝后的字符串
  NSString *string4 = [NSString stringWithString:@"hello"];
 NSString *string5 = [[NSString alloc] initWithString:string3];
 NSLog(@"%p,%p,%p",&string3,&string4,&string5);
 NSString *string6 = [string5 stringByAppendingString:@"\nHi"];
 // 把C的字符串转化为OC的字符串
    NSString *str = [[NSString alloc] initWithUTF8String:"hello world"];
    NSString *str2 = [NSString stringWithUTF8String:"hello world"];

  // 用格式化字符串初始化  可完成字符串的拼接以及完成C的字符串与OC的字符串的转化
    int a = 123;
    NSString *str3 = [[NSString alloc]initWithFormat:@"a = %d %s%@", a, "aaaa", @"bbbb"];
    NSString *str4 = [NSString stringWithFormat:@"%s","hello world"];

2.字符串的类型转换

    NSString * str = @"hello";
    const char *p = [str UTF8String]; // 将OC字符串转化为C的字符串

    str = @"123";
    int a = [str intValue]; // 将数字串转化成整型数据
    [str floatValue]; // 将数字串转化成float型
    [str doubleValue]; // 将数字串转化成double型

    // 结构体 输出
    // 结构体 [点] 转换字符串
    NSString *str1 = NSStringFromCGPoint(point);

    // 结构体 [尺寸] 转换字符串
    NSString *str2 = NSStringFromCGSize(size);

    // 结构体 [矩形] 转换字符串
    NSString *str3 = NSStringFromCGRect(rect);

3.字符串大小写转换

<pre name="code" class="objc"> // 全部转为大写
    // 结果 ABC
    [@"abc" uppercaseString];
    // 全部转为小写
    // 结果 bcd
    [@"BCD" lowercaseString];
    // 首字母大写
    // 结果 Acb
    [@"acb" capitalizedString];

4.字符串比较

   // 比较两个字符串内容是否相同
    // 相等返回 yes 不相等返回 no
    BOOL b =[str isEqualToString:str2];

    //判断str2中是否包含str1
    [str2 containsString:str1];
    // 忽略大小写进行比较
    NSComparisonResult  result1 = [string caseInsensitiveCompare:str];
    NSComparisonResult  result2 = [string localizedCaseInsensitiveCompare:str];

    // 两个字符串内容比较
    // NSComparisonResult result = {NSOrderedAscending, NSOrderedSame,NSOrderedDescending}
    // NSOrderedAscending    右边 > 左边  == -1
    // NSOrderedSame         内容相同     ==  0
    // NSOrderedDescending   左边 > 右边  ==  1

    NSComparisonResult result3 = [str compare:str2];
    NSComparisonResult result4 = [string compare:@"taojian" options:NSCaseInsensitiveSearch];
    NSComparisonResult result5 = [string compare:@"taojian" options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length)];
    NSComparisonResult result6 = [string compare:@"taojian" options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length) locale:nil];
    NSComparisonResult result7 = [string localizedCompare:str];

options: // 枚举参数
    enum{
        NSCaseInsensitiveSearch = 1, // 不区分大小写比较
        NSLiteralSearch = 2, // 区分大小写比较
        NSBackwardsSearch = 4, // 从字符串末尾开始搜索
        NSAnchoredSearch = 8, // 搜索限制范围的字符串
        NSNumbericSearch = 64 // 按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt

        // 以下定义高于 mac os 10.5 或者高于 iphone 2.0 可用    ,
        NSDiacriticInsensitiveSearch = 128, // 忽略 "-" 符号的比较
        NSWidthInsensitiveSearch = 256, // 忽略字符串的长度,比较出结果
        NSForcedOrderingSearch = 512 // 忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者 NSOrderedDescending

        // 以下定义高于 iphone 3.2 可用    ,
        /// 只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法。
        /// 使用通用兼容的比较方法,如果设置此项,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearc
        NSRegularExpressionSearch = 1024

5.字符串搜索

  // 判断字符串是否以abc开头
    [@"abcdfa" hasPrefix:@"abc"];
    // 判断字符串是否bcd结尾
    [@"adbcd" hasSuffix:@"bcd"];
    // 判断字符串是否包含指定字符串,返回位置和长度
    NSRange range = [@"123456" rangeOfString:@"456"];
    // 搜索字符串所在的范围
    NSRange range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch];  // 输出{17, 3}
    // 指定范围进行搜索
    NSRange range = NSMakeRange(0, 9);
    range = [@"123456456qweasasd456" rangeOfString:@"456" options:NSBackwardsSearch range:range];
    // 找与之开头相同的字符 返回相同开头的字符串
        NSString *string = @"fg   s  abcdefg hijklmn s     d \n fdsgf";
    NSString *str = [string commonPrefixWithString:@"fgsdfgrg" options:NSLiteralSearch]; // 输出fg

6.字符串截取

<pre name="code" class="objc"><pre name="code" class="objc">NSString * str5 = @"helloworld";
    NSString * ptr1 = [str5 substringToIndex:2];// 字符串抽取 从头开始抽取2个字母,返回he
    NSString * ptr2 = [str5 substringFromIndex:4];// 从第4个字母开始抽取到字符串结束,返回oworld
    NSRange range1 = {6,2};// 结构体初始化
    NSString * ptr3 = [str5 substringWithRange:range1];// 在range指定范围内抽取,返回or
    NSString * ptr4 = [str5 substringWithRange:NSMakeRange(6,2)];// NSMakeRange可以生成一个结构体

 // 取出字符串"123-456-789-000"中的数字部分,组成一个新的字符串输出
    NSMutableString *strm = [NSMutableString stringWithString:@"123-456-789-000"]; //只有可变字符串有这个方法
    [strm replaceOccurrencesOfString:@"-"
                          withString:@""
                             options:NSLiteralSearch
                               range:NSMakeRange(0, strm.length)];
    NSLog(@"%@",strm);  //输出:123456789000

7.字符串的遍历

// 根据\n遍历
NSString *string = @"   s  abcdefg hijklmn s     d \n fdsf";
// 根据\n一行一行的打印
[string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop){
                                      NSLog(@"\n%@",line);
     }
];

// 根据 条件options 遍历
NSString *string = @"   s  abcdefg hijklmn s     d ";
NSMutableString * mutableString = [NSMutableString string];
// NSStringEnumerationByWords:将string按空格分开,并且会自动清理首尾的空格
// 这个方法会把中间多余的空格也清理掉,比如上面的字符串,s和d之间有两个空格,会变成一个空格
[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop)
{
        [mutableString appendFormat:@"%@ ",substring];
}];

// 删除我们添加的末尾的一个空格
[mutableString deleteCharactersInRange:NSMakeRange(outputString.length-1, 1)];

8.路径操作与数组操作

// 用指定字符串分割字符串,返回一个数组
NSArray *array = [@"1,2,3,4,5,6" componentsSeparatedByString:@","];  

// 根据空格拆分
NSArray *array = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

// 将数组中的字符串组合成一个文件路径
NSMutableArray *components = [NSMutableArray array];
[components addObject:@"Users"];
[components addObject:@"CentralPerk"];
[components addObject:@"Desktop"];
NSString *path = [NSString pathWithComponents:components];
NSLog(@"%@",path);  //Users/CentralPerk/Desktop   

// 将一个路径分割成一个数组
NSArray *array1 = [path pathComponents];
NSLog(@"%@",array1);

// 判断是否为绝对路径(依据:是否以‘/‘开始)
path = @"/Users/CentralPerk/Desktop";
NSLog(@"%i",[path isAbsolutePath]);  

// 获取最后一个目录
NSLog(@"%@",[path lastPathComponent]);  

// 删除最后一个目录
NSLog(@"%@",[path stringByDeletingLastPathComponent]);  

// 拼接一个目录
NSLog(@"%@",[path stringByAppendingPathComponent:@"aaa"]);   //Users/CentralPerk/Desktop/aaa
NSLog(@"%@",[path stringByAppendingString:@"aaa"]);      //Users/CentralPerk/Desktopaaa
NSLog(@"%@",[path stringByAppendingFormat:@"%@%@",@"b",@"c"]);  //Users/CentralPerk/Desktopbc

9.文件扩展名

// 拓展名出来
 // 获取拓展名,不带.
 NSString *str2 = @"Users/CentralPerk/Desktop/test.txt";
 NSLog(@"%@",[str2 pathExtension]);
 // 添加拓展名,不需要带.
 NSLog(@"%@",[str2 stringByAppendingPathExtension:@"mp3"]);
 // 删除拓展名,带.一块删除
 NSLog(@"%@",[str2 stringByDeletingPathExtension]);

10.文件操作

// 将字符串设置为path制定的文件的内容
-(id) initWithContentsOfFile:path encoding:enc error:err
// 创建一个新字符串并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中错误
+(id) stringWithContentsOfFile:path encoding:enc error:err  

// 将字符串设置为url(NSURL *)url的内容,使用字符编码enc,如果非零,则返回err中的错误
-(id) initWithContentsOfURL:url encoding:enc error:err
// 创建一个新的字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误
+(id) stringWithContentsOfURL:url encoding:enc error:err

11.补充

// 求字符串长度
[str1 length]
// 获取字符串中的字符
[str1 characterAtIndex:1]
// 清楚左右两段的空格
NSString *str = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// 在字符串后面补0
NSString *str = [string stringByPaddingToLength:12 withString:@"0" startingAtIndex:0];

二、NSMutableString

// 将不可变的字符串转换为可变的字符串
NSMutableString * str =  [[NSMutableString alloc]initWithString:@"hello world"];

// 在指定下标为2的(不要越界)位置插入013字符串
[str insertString:@"013" atIndex:2]; 

// 在字符串末尾追加字符串taotao
[str appendString:@"taotao"];

// 从0位置删除2个字符
[str deleteCharactersInRange:NSMakeRange(0, 2)];

// 给字符串重新赋值
[str setString:@"yintian"];

// 将3位置后1个字符替换成ios字符串
[str replaceCharactersInRange:NSMakeRange(3, 1) withString:@"ios"];

// 根据选项 opts ,使用指定 range 中的nsstring2 替换所有的 nsstring
-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range

文/WCdevil(简书作者)
原文链接:http://www.jianshu.com/p/7994b0ad6b88
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-23 18:48:32

NSString总结的相关文章

iOS - 字符串(NSString)

/*________________________NSString(不可变字符串)________________________*/ //________________________1.字符串的创建___________________________________// //创建字符串常量 NSString *string1 = @"Hello";  //内容不变 string1 = @"Hello world"; //创建字符串 NSString *st

IOS开发-ObjC-NSString

NSString是oc语言Foundation框架中常用的类,我根据每个方法的功能将NSString的常用方法分为创建字符串.初始化字符串.判断和比较字符串.大写和小写相互转化.字符串的截取.类型转换等功能.它的方法按功能分如图所示(具体每个方法的作用我在后后面有详细的备注,其实根据驼峰命令也基本可以看出每个方法的作用),有些方法带参数,有些不带参数,方法的使用都很容易,在Xcode下编程时会自动匹配: 1??创建字符串: 1 string:创建一个空字符串 2 stringWithstring

继承NSString,NSArray 怎么写

今天在进行一个字符串测试的时候,自定义了一个继承自NSString的类,但是出现了一些问题,查阅官方文档后得到了下面这些结论 在Objective-C中,对于NSString.NSArray等一些系统的基础类,苹果公司不推荐继承创建新类的,要想给它们扩展功能只能给它们添加新的categroy(类目). 但是直接继承的话,也是可行的,只是会出现各种问题 以NSString为例 首先,创建一个NSString的子类 BFString,不添加任何方法和属性 直接创建一个BFString的实例对象,是没

【非凡程序员】 OC第五节课 (数据类型NSString和NSString)

//  main.m//  ZiFuChuan////  Created by 非凡程序员 on 15/5/18.//  Copyright (c) 2015年 非凡程序员. All rights reserved.// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {    @autoreleasepool { NSString *[email protected]"AB"

ios Enum Value To NSString

#define enumToString(value)  @#value eg. typedef NS_ENUM(NSInteger, Sex) { Male = 0, Famale = 1, }; NSString * string =  enumToString(Male); [email protected](@"string=%@", string); string=Male;

继续NSString的学习

一.大小写转换1.- (NSString *)uppercaseString; 所有字符转化为大写2.- (NSString *)lowercaseString; 所有字符转化为小写3.- (NSString *)capitalizedString; 所有单词首字母转化大写 NSLog(@"%@", [demoTwo uppercaseString]);NSLog(@"%@", [demoTwo lowercaseString]);NSLog(@"%@&q

IOS中NSString的常见用法

iOS NSString的常用用法 //1.创建常量字符串. NSString *astring = @"This is a String!"; //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; //3.在以上方法中,提升速度:initWithString方法 NSString *astring = [[NSString allo

iOS解决NSData转NSString后字符为空

iOS中,将NSData转NSString的一般方法为[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];但是当data中包含00时,所获得的新字符就会为nil,这时我们应该这样转 [NSString stringWithUTF8String:[data bytes]];

NSString基本概念

1.NSString基本概念 什么是NSString? 一个NSString对象就代表一个字符串(文字内容) 一般称NSString为字符串类 2.NSString创建方式 最直接的方式(常量字符串) 常量区中的字符串只要内容一致, 不会重复创建 NSString *str1 = @"lnj"; NSString *str3 = @"lnj"; NSLog(@"str1 = %p, str3 = %p", str1, str3); 输出地址一致

iOS之NSString类型为什么要用copy修饰

在开发的过程中,只知道NSString类型最好用copy修饰而不能用strong,但是不知道为什么,今天了解了下,总算搞明白了. 如下所示,当修饰符为copy时,因为NSMutableString是NSString类型的子类,所以可以用指针self.name指向mStr,但是我们知道copy的含义是指当重新赋值时深拷贝新对象再赋值给self.name, 所以此时self.name的指针和mStr的指针指向的对象就不同了,所以当给mStr对象发送方法appendString的时候,修改的只是mSt