8月17日NSString

一、字符串的创建

  1. //1.创建常量字符串
  2. NSString *str1 = @"hello world";
  3. NSLog(@"%@",str1);
  4. //2.通过类方法创建字符串
  5. NSString *str2 = [NSString stringWithString:str1];
  6. NSLog(@"str2 = %@",str2);
  7. //3.通过实例方法创建字符串
  8. NSString *str3 = [[NSString alloc]initWithString:str1];
  9. NSLog(@"str3 = %@",str3);
  10. //4.通过格式化方式创建字符串
  11. NSString *str4 = [NSString stringWithFormat:@"user = %@,pwd = %@",@"xu",@"123456"];
  12. NSLog(@"str4 = %@",str4);
  13. //5.通过C语言字符串创建
  14. const char *str5 = "how are you";
  15. NSString *str6 = [NSString stringWithUTF8String:str5];
  16. NSLog(@"str6 = %@",str6);
  17. //6.通过文件方式创建字符串
  18. NSError *error;
  19. NSString *str7 = [NSString stringWithContentsOfFile:@"/Users/mac/Desktop/OC进行时/day06/01-NSString/1.txt" encoding:NSUTF8StringEncoding error:&error];
  20. if (!error) {
  21. NSLog(@"str7 = %@",str7);
  22. }
  23. else
  24. {
  25. NSLog(@"文件读取失败:%@",error);
  26. }
  27. //7.通过URL方式创建字符串
  28. NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
  29. NSString *str8 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
  30. if (!error) {
  31. NSLog(@"str8 = %@",str8);
  32. }
  33. else
  34. {
  35. NSLog(@"文件读取失败:%@",error);
  36. }
二、字符串的比较
  1. NSString *str1 = @"hello world";
  2. NSString *str2 = @"how are you";
  3. NSString *str3 = [NSString stringWithString:str1];//使用已有的字符串创建新的字符串
  4. //方式1
  5. if (str1 == str3){
  6. NSLog(@"str1 == str3");
  7. }
  8. //方式2
  9. if ([str1 isEqual:str3]) {
  10. NSLog(@"str1 == str3");
  11. }
  12. //方式3
  13. if ([str1 isEqualTo:str3]) {
  14. NSLog(@"str1 == str3");
  15. }
  16. //方式4
  17. if([str1 isEqualToString:@"hello world"])
  18. {
  19. NSLog(@"str1 == str3");
  20. }
  21. //方式5
  22. NSComparisonResult result = [str1 compare:str2];
  23. if (result == NSOrderedSame) {
  24. NSLog(@"str1 == str2");
  25. }
  26. else if (result == NSOrderedAscending)
  27. {
  28. NSLog(@"str1 < str2");
  29. }
  30. else//NSOrederDescending
  31. {
  32. NSLog(@"str1 > str2");
  33. }
  34. /*
  35. compare的是一个枚举类型的,如果返回值为:-1表示NSOrderedAscending;返回值为0:NSOrderedSame;返回值为1:NSOrderedDescending
  36. */
三、字符串检索
  1. NSString *str1 = @"how are you";
  2. NSRange range = [str1 rangeOfString:@"are"];
  3. NSLog(@"location = %ld,length = %ld",range.location,range.length);
  4. NSString *str2 = @"http://www.baidu.com”;
  5. //判断字符串是否以某前缀开头
  6. if ([str2 hasPrefix:@"http://"]) {
  7. NSLog(@"http协议");
  8. }
  9. //判断字符串是否以某后缀结尾
  10. NSString *str3 = @"/users/destTop/1.txt";
  11. if ([str3 hasSuffix:@"txt"]) {
  12. NSLog(@"文本文件");
  13. }
  14. NSString *str4 = @"http://www.baidu.com?user=admin&pwd=123456";
  15. NSRange range1 = [str4 rangeOfString:@"user="];
  16. NSRange range2 = [str4 rangeOfString:@"pwd="];
  17. NSUInteger location = range1.location + range1.length;
  18. NSUInteger length = range2.location-location;
  19. NSRange range3 = NSMakeRange(location, length);
  20. NSString *user = [str4 substringWithRange:range3];
  21. NSString *pwd = [str4 substringFromIndex:range2.location + range2.length];
  22. NSLog(@"user = %@,pwd =%@",user,pwd);

四、其他类型转换字符串

  1. NSString *str1 = [NSString stringWithFormat:@"%d,%.2f,%c,%s",10,12.34,'a',"hello world"];
  2. NSLog(@"str1 = %@",str1);
  3. //1.字符串转整型
  4. NSString *str2 = @"20";
  5. NSInteger i = [str2 integerValue];
  6. NSLog(@"i = %ld",i);
  7. //2.字符串转实型
  8. CGFloat j = [str2 doubleValue];
  9. NSLog(@"j = %.2lf",j);
  10. //3.字符串转C语言字符串
  11. NSString *str4 = @"how are you";
  12. const char *pStr = [str4 UTF8String];
  13. NSLog(@"pStr = %s",pStr);
 
五、可变字符串的常用操作
  //1.创建
  NSMutableString *str = [NSMutableString stringWithCapacity : 容量];
  //2.添加内容
  [str appendSting:@“hello world”];
  [str appendFormat:@“%d”,123];
  //这两种插入方式都在尾部进行插入;
  //3.插入内容:  
  [str insertString:@“ok “ atIndex:插入位置];
  //4.替换内容
  NSRange range = [str rangeOfString:@“world”];  
  [str replaceCharactersInRange:range withString:@“WORLD”];
  //5.删除内容
  [str deleteCharactersRange:range];
  //6.设置成其他字符串
  [str setString:@“how are you”];
 
六、自定义结构体
  //1、创建一个Student为例:
  1.   typedef struct
  2.   {  
  3.     char *name;
  4.     int age;
  5.     char gender;
  6.   }Student;
  7.   Student stu = {“zhangsan”,22,’F’};
  8.   NSValue *value = [NSValue valueWithBytes:&stu objcType:@encode(Student)];
  9.   NSLog(@“name = %s,age = %d,gender = %c”,stu.name,stu.age,stu.gender);
  10.   Student stu2;
  11.   [value getValue:&stu2];
  12.   NSLog(@“name = %s,age = %d,gender = %c”,stu2.name,stu2.age,stu2.gender);

  /* 封装自定义结构体的操作:

1.声明结构体变量

2.创建一个NSValue的值对象,并将结构体变量的地址存放进去,

3.也可以通过getValue将值对象存储的数据存放到另外一个结构体变量中。

*/

  2、在Foundation下的常用结构体NSRange、NSPoint、NSSize、NSRect
  //1.创建一个结构体变量,用来确定范围
  1. NSRange range = NSMakeRange(0,5);
  2. //2.创建一个值对象
  3. NSValue *value = [NSValue valueWithRange:range];
  4. //3.取出这个值对象的值
  5. NSRange range2 = [value rangeValue];
  NSPoint、NSSize、NSRect与NSRange的操作雷同,不再一一列举。
 
七、NSArray
  //1、创建
  1. NSArray *arr1 = @[@"one",@"two",@"three",@"four”];
  2. //通过对象
  3. NSArray *arr2 = [NSArray arrayWithObjects:@"one",@"two",@"three",@"four", nil];
  4. NSArray *arr3 = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
  5. NSArray *arr4 = [[NSArray alloc]initWithArray:arr3];  
   //2、遍历
  1. //第一种:
  2. for (int i = 0; i<[arr2 count]; i++) {
  3. NSLog(@"arr2->%@",arr2[i]);
  4. }
  5. //第二种:
  6. for (int i = 0; i < [arr2 count]; i++) {
  7. NSLog(@"arr2->%@",[arr2 objectAtIndex:i]);
  8. }
  9. //第三种:
  10. [arr2 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  11. NSLog(@"index = %ld,obj = %@",idx,obj);
  12. if ([obj integerValue] == 3) {
  13. *stop = YES;
  14. }
  15. }];
  16. //第四种:
  17. for(id obj in arr2)
  18. {
  19. NSLog(@"%@",obj);
  20. }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

OC_NSString、的更多相关文章

  1. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  2. 【.net 深呼吸】细说CodeDom(2):表达式、语句

    在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...

  3. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  6. 初识Hadoop、Hive

    2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...

  7. boosting、adaboost

    1.boosting Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数.他是一种框架算法,主要是通过对样本集的操作获 ...

  8. 《Web 前端面试指南》1、JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  9. .Net Core MVC 网站开发(Ninesky) 2.4、添加栏目与异步方法

    在2.3中完成依赖注入后,这次主要实现栏目的添加功能.按照前面思路栏目有三种类型,常规栏目即可以添加子栏目也可以选择是否添加内容,内容又可以分文章或其他类型,所以还要添加一个模块功能.这次主要实现栏目 ...

随机推荐

  1. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  2. Memcached 常见的问题

    memcached是怎么工作的? Memcached的奇妙来自两阶段哈希(two-stage hash).Memcached就像一个巨大的.存储了非常多<key,value>对的哈希表. ...

  3. ASCII码表(0-255)

  4. CentOS6.X 升级内核至 3.10

    1.1 查看当前版本 [root@localhost ~]# uname -r -.el6.x86_64 1.2 导入public key [root@localhost ~]# rpm --impo ...

  5. 3、ACE-实用生活口语---讲打电话Talking on the phone

    (3)需要留口信吗?请让他给我回电话Would you like to leave a message?May I take a message for you ?Please tell him to ...

  6. PHP面向过程和面向对象

    php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...

  7. 前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 "

    前台传递给后台的JSON字符串中的引号 "" 在JAVA后台被转义为 &quot 1.问题: 前台数据,JSON字符串带有引号 "" ,数据被传递到后台 ...

  8. Redis 单机版本安装

    亲装! 1.linux 系统镜像 redis 版本  使用redis-3.2.8.tar.gz(截止2017年4月的最新稳定版) 在安装之前先安装下redis 需要的环境 wget http://do ...

  9. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  10. Vue.js之组件嵌套小demo

    Vue.js之组件嵌套的小demo项目 第一步:初始化一个wabpack项目,这里不在复述.第二步:在components文件夹下新建Header.vue Footer.vue和Users.vue三个 ...