iOS 不可变字符串NSString的使用

字符初始化

1.创建一个不可变字符串str1 值是常量字符串

  NSString * str1 = @"常量字符串";

  NSLog(@"%@",str1);

2.用字符串创建字符串 构造

  NSString * str2 = [[NSString alloc]initWithString:str1];

  NSLog(@"%@",str2);

  NSString*str=[[NSString alloc]initWithFormat:@"asfgrdsf",nil];

3.用字符串的格式化来初始化创建一个字符串

  NSString * str3 = [[NSString alloc]initWithFormat:@"%@%d%f",@"abc",123,12.3];

  NSLog(@"%@",str3);

4.用字符串的类方法创建一个格式化字符串

  NSString * str4 = [NSString stringWithFormat:@"%@%d",@"def",456];

  NSLog(@"%@",str4);

将C语言字符串转换成OC字符串

//OC中只要遇到字符串编码的问题均为NSUTF8StringEncoding

1.万国码unicode

  NSString * str5 = [[NSString alloc]initWithCString:"ABC" encoding:NSUTF8StringEncoding];

  NSLog(@"%@",str5);

  char * p = "abc";

  NSString  * str5_1 = [[NSString alloc]initWithUTF8String:p];

  NSLog(@"%@",str5_1);

2.类方法转换C字符串

  NSString * str5_2 = [NSString stringWithCString:p encoding:NSUTF8StringEncoding];

  NSString * str5_3 = [NSString stringWithUTF8String:p];

  NSLog(@"%@ %@",str5_2, str5_3);

字符串的比较

  //判断字符串中不能是用 == 判断
  //在设计NSString时,内部应用了一种优化的思想, 享元设计思想
  //在设计字符串的时候,会有一个缓冲池,只要缓冲池中有当前字符串,那么就会返回当前字符串的地址,不会再去重复创建,因为大量的穿件字符串会消耗内存,所以提过了这种方式,当我们是用StringWithFormat的时候回重新创建一个新的字符串,所以不能用 == 号进行判断

  //在判断字符串中 == 判断的是字符串的指针地址是否相等,存才一定判断错误的风险.

  //在实际开发中不能是用== 而是使用专门判断字符串想的方法 isEqualToString

  NSString * str6 = @"ab";

  NSString * str6_1 = @"你好";

  //接收返回值

  //BOOL isOK = [str6 isEqualToString:str6_1];

  if([str6 isEqualToString:str6_1]){
      NSLog(@"%@ == %@",str6,str6_1);
  }else{
      NSLog(@"%@ != %@",str6,str6_1);
  }

获取字符串的长度

  //在NSString中 任何字母,数字,中文字符的长度都是1

  NSLog(@"%@的长度是%ld",str6,[str6 length]);

  //@"abcde";

  //字符串的位置是从0开始计数的

  //一个汉字占2个字节

  NSString * str7 = @"xcode";

  //获取单个字符
  //unichar 是两个字节的 char
  //字符串的位置是从0开始计数的

  unichar newChar = [str7 characterAtIndex:4];

  NSLog(@"newChar = %c",newChar);

  //NSString中有汉字 "%C"

  unichar hanzi = [str6_1 characterAtIndex:0];

  NSLog(@"hanzi = %C",hanzi);

比较两个字符串的大小

  NSString * str8 = @"yang chang";

  NSString * str8_1 = @"B duan";

  NSComparisonResult result =[str8 compare:str8_1];

  if (result == NSOrderedSame) {
      NSLog(@"%@ = %@",str8 ,str8_1);
  //升序 前者小 后者大
  }else if (result == NSOrderedAscending){
      NSLog(@"%@ < %@",str8,str8_1);
  //降序 前者大 后者小
  }else if(result == NSOrderedDescending){
      NSLog(@"%@ > %@",str8,str8_1);
  }

字符串的拼接

  NSString * str9 = @"北京";

  NSString * str9_1 = @"最帅";

  //str9_1拼接到str9的后面

  NSString * str9_2 =  [str9 stringByAppendingString: str9_1];

  NSLog(@"%@",str9_2);

1.格式化拼接 在初始化字符串的同时进行拼接

  str9_2 = [str9 stringByAppendingFormat:@"%@%d%f",str9_1,520,520.0];

  NSLog(@"%@",str9_2);

2.如何遍历字符串中每一个字符

  NSString * str10 = @"abcdefgh";

  for(int i = 0; i<[str10 length];i++){

      char c = [str10 characterAtIndex:i];

      NSLog(@"%d = %c ",i,c);

}

字符串的查找

  NSString * str11 = @"你好北京123";

  //在当前字符串str11中查找123这个字符串,将他的位置和长度返回

  NSRange range = [str11 rangeOfString:@"123"];

  NSLog(@"loc = %lu , len = %lu",range.location,range.length);

  /**

      typedef struct _NSRange {

      NSUInteger location;//这个是位置不是长度!!!!!

      NSUInteger length;//这个是长度不是位置!!!

      } NSRange;

   */

判断当前字符串是否存在?

   if(range.location != NSNotFound){

      NSLog(@"123在%@中位置是%lu",str11,range.location);

  }else{

      NSLog(@"123不再字符串");

  }

  if(range.length != 0){

      NSLog(@"123在%@中长度是%lu",str11,range.length);

  }else{

      NSLog(@"不再");

  }

字符串的截取

  NSString * str12 = @"北京欢迎您,iOS入门还是比较容易的ios";

  //是从字符串str12中截取出一个子串(从原串第0个字符开始截取到传入得[值-1]的位置)

  NSString * str12_1 = [str12 substringToIndex:5];

  NSLog(@"str12_1 = %@",str12_1);

  //字符串str12中截取指定位置6到字符串的结尾

  NSString * str12_2 = [str12 substringFromIndex:6];

  NSLog(@"str12_2 = %@", str12_2);

  //通过已知的范围range在原字符串中查找子串

  //第一个是位置

  //第二个是长度

  NSRange range2 = {2,4};

  NSLog(@"%@",[str12 substringWithRange:range2]);

  //将原串str12指定范围内的字符用@"努力学习"替换

  NSString * str12_3 = [str12 stringByReplacingCharactersInRange: NSMakeRange(0, 9) withString:@"努力学习"];

  NSLog(@"str12_3 = %@",str12_3);

判断前缀和后缀

  NSString * str13 = @"http://www.baidu.com";

  //检查某个字符串是否已指定的字符串开始(前缀)

  if([str13 hasPrefix:@"http"]){

      NSLog(@"是");

  }else{

      NSLog(@"不是");

  }

检查后缀

  if([str13 hasSuffix:@"com"]){

      NSLog(@"是");

  }else{

      NSLog(@"不是");

  }

字符串的转换

  NSString * str14 = @"abc";

  //将str14转换成大写

  str14 = [str14 uppercaseString];

  NSLog(@"%@",str14);

  //将str14转换成小写

  str14 = [str14 lowercaseString];

  NSLog(@"%@",str14);

将基本类型转换型字符串

  //    stringWithFormat

  //    initWithFormat

  //将字符串转换成基本数据类型

  NSString * str14_1 = @"1";

  int a = [str14_1 intValue];

  //floatValue

  //doubleValue

  NSString * str14_2 = @"YES";

  BOOL isOK = [str14_2 boolValue];

  //boolValue

  NSLog(@"%d",a);

  //@"1"

字符串的拆分

  NSString * str15 = @"a,b,c, d";

  //用指定的分隔符将字符串才分成数组

  //is+-n*/io=pp

  NSArray * array =  [str15 componentsSeparatedByString:@","];

  NSLog(@"%@",array);

  NSArray * array5 = [str15 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];

  //[NSCharacterSet characterSetWithCharactersInString:@", "]这个方法创建一个集合的对象,返回对象地址,字符集合中的字符,来自字符串的@", "

  NSLog(@"%@",array5);

  //    for (int i= 0; i<[array count];i++) {

  //        NSLog(@"%@",[array objectAtIndex:i]);

  //    }

从指定文件读取字符串

  //将文件的内容读入到字符串中

  //第一个参数是文件的路径

  //第二个字符编码

  //第三个错误信息

  NSString * str16 = [NSString stringWithContentsOfFile:@"/Users/hhh/Desktop/github.txt" encoding:NSUTF8StringEncoding error:nil];

  NSLog(@"str16 = %@",str16);

从网上读取文件内容到字符串中

  //第一个 网址

  //第二个 字符编码

  //第三个 错误信息

  NSString * str17 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://10.0.178.5/resource/github.txt"]encoding:NSUTF8StringEncoding error:nil];

  NSLog(@"str17 = %@",str17);

写入文件

  //第一个是目标文件路径

  //第二个是否写入缓存(原子)

  //第三个编码

  //第四个错误信息

  //如果没有文件,那么就会创建出一个新的文件,如果原文件已经存在,那么会覆盖原文件

  [str12 writeToFile:@"/Users/hhh/Desktop/aa.txt"  atomically:YES encoding:NSUTF8StringEncoding error:nil];
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容