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. C/C++程序开发中实现信息隐藏的三种类型

    不管是模块化设计,还是面向对象设计.还是分层设计,实现子系统内部信息的对外隐藏都是最关键的内在要求.以本人浅显的经验,把信息隐藏依照程度的不同分成(1)不可见不可用(2)可见不可用(3)可见可用. 1 ...

  2. c#文件路径的获取

    string fullPath = @"\WebSite1\Default.aspx"; string filename = System.IO.Path.GetFileName( ...

  3. 自定义实现wcf的用户名密码验证

    目前wcf分为[传输层安全][消息层安全]两种,本身也自带的用户名密码验证的功能,但是ms为了防止用户名密码明文在网络上传输,所以,强制要求一旦使用[用户名密码]校验功能,则必须使用证书,按照常理讲, ...

  4. 对asp.net缓存 的深入了解

    一.缓存概念,缓存的好处.类型.--------------------------------------------------------------------------------     ...

  5. OpenCV学习笔记十六:opencv_calib3d模块

    一,简介: 该库用于3D信息重建,姿态估计,摄像机标定等.

  6. Redis 在windows中启动

    redis-server.exe redis.windows.conf 或 redis-server.exe redis.conf

  7. CodeIgniter框架——创建一个简单的Web站点(include MySQL基本操作)

    目标 使用 CodeIgniter 创建一个简单的 Web 站点.该站点将有一个主页,显示一些宣传文本和一个表单,该表单将发布到数据库表中. 按照 CodeIgniter 的术语,可将这些需求转换为以 ...

  8. 【BZOJ3277/3473】串/字符串 后缀数组+二分+RMQ+双指针

    [BZOJ3277]串 Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身). Inpu ...

  9. Python中 sys.argv[]的用法实操

    使用sys.argv[]首先要调用模块sys import sys 通俗说,这个东西就是取代了input的功能,input是用pycharm上,而argv[]是用在命令行上 也就是window 上的小 ...

  10. python模块学习(四)

    re模块 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...