C语言中,字符串是有char(ASC||码)字符组成。

OC中,字符串是由unichar(Unicode)字符组成。

1、字符串(NSString)

 NSString:不可变字符串,即:创建以后,内容和长度不能更改。

 NSMutableString:可变字符串,即:创建以后,内容和长度可以修改。

2、不可变字符串创建

 1> 初始化方法创建对象

  - (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(,);

    NSString *string1= [[NSString alloc] initWithFormat:@"hello wold"];

 2> 便利构造器创建对象

  + (instancetype)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(,);

    NSString *string2 = [NSString stringWithFormat:@"hell wold"];

 3> 字面量创建对象

    NSString *string3 = @"hello kitty";                                      

3、不可变字符串常用方法

 1> 获取字符串的长度

  @property (readonly) NSUInteger length;

  实现方式:str.length;

 2> 获取指定位置的字符  unichar OC 中用来表示字符

  - (unichar)characterAtIndex:(NSUInteger)index;

unichar c= [string2 characterAtIndex:];

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

 3> 字符串比较

  ① 比较

   - (NSComparisonResult)compare:(NSString *)string;

   NSString *s12 = @"zhaofuyi";
  NSString *s13 = @"wanghai";
  NSInteger result = [s12 compare:s13];
  NSLog(@"result = %ld", result);

  ② 字符串是否相等

   - (BOOL)isEqualToString:(NSString *)aString;

BOOL isEqual = [s12 isEqualToString:s13];
NSLog(@"isEqual = %d", isEqual);

 4> 拼接字符串

  ① - (NSString *)stringByAppendingString:(NSString *)aString;

        NSString *string8 = @"nana";
NSString *string9 = @"liuaoran";
NSString *stringlove = [string8 stringByAppendingString:string9];
NSLog(@"stringlove=%@",stringlove);

  ② - (NSString *)stringByAppendingFormat:(NSString *)format, ...;

 5> 替换字符串

  ① - (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement;

    NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len);  // 确定位置和长度

  ② - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

 NSString *string10 = @"李易峰";

 NSString *string11 = [string10 stringByReplacingOccurrencesOfString:string10 withString:@"赵符壹"];

 NSLog(@"nan=%@",string11);

 6> 字符串对象转化为其他类型

  @property (readonly) double doubleValue;
  @property (readonly) float floatValue;
  @property (readonly) int intValue;
  @property (readonly) NSInteger integerValue NS_AVAILABLE(10_5, 2_0);
  @property (readonly) long long longLongValue NS_AVAILABLE(10_5, 2_0);
  @property (readonly) BOOL boolValue NS_AVAILABLE(10_5, 2_0);

         NSString *s14 = @"";
NSInteger strValue = [s14 integerValue];
NSLog(@"strValue = %ld", strValue);

 7> 判断字符串的前缀和后缀

  - (BOOL)hasPrefix:(NSString *)str; // 前缀
  - (BOOL)hasSuffix:(NSString *)str; // 后缀

 NSString *string4 = @"www.欧巴.png";  // 图片欧巴

 BOOL isHassuffix = [string4 hasSuffix:@".png"];  // 后缀
NSLog(@"isHassuffix=%d",isHassuffix); BOOL ishasprefix = [string4 hasPrefix:@"www."];
NSLog(@"ishasprefix = %d",ishasprefix); // 前缀

 8> 查找某个字符串在另一个字符串的范围

  - (NSRange)rangeOfString:(NSString *)searchString;

      NSString *string5 = @"蓝鸥科技有限公司";
NSString *string6 = @"蓝鸥科技"; // NSRange 结构体,表示成员变量
// location 起始位置
// length 长度
NSRange range =[string5 rangeOfString:string6];
NSLog(@"location=%ld,length = %ld",range.location,range.length);

 9> 字符串截取

  - (NSString *)substringWithRange:(NSRange)range;

 NSString *string7 = @"hello wold kitty";

 NSRange range1 = NSMakeRange(, );
NSString *sunstr1 = [string7 substringWithRange:range1];
NSLog(@"sunstr1=%@",sunstr1);

  从指定位置向后截取

  - (NSString *)substringFromIndex:(NSUInteger)from;

  从指定位置向前截取,不包含指定位置的下标

  - (NSString *)substringToIndex:(NSUInteger)to;

         // 从指定位置向后截取
NSString *sunstr2 = [string7 substringFromIndex:];
NSLog(@"sunstr2=%@",sunstr2);
// 从指定位置向前截取,不包含指定位置的下标
NSString *sunstr3 = [string7 substringToIndex:];
NSLog(@"sunstr3=%@",sunstr3);

 10> 字符串大小写操作

  ① 字符串全部大写

   @property (readonly, copy) NSString *uppercaseString;

  ② 字符串全部大写

   @property (readonly, copy) NSString *lowercaseString;

  ③ 字符串首字母大写

   @property (readonly, copy) NSString *capitalizedString;

         // 首字母大写
NSString *s15 = @"zheng";
s15 = [s15 capitalizedString];
NSLog(@"s15 = %@", s15);
// 全部大写
s15 = [s15 uppercaseString];
NSLog(@"s15 = %@", s15);
// 全部小写
s15 = [s15 lowercaseString];
NSLog(@"s15 = %@", s15);

4、可变字符串(NSMutableString)创建

 1> 可变与不可变的区别

  不可变字符串 —— 本身不能被修改。

  对不可变字符串的修改操作,操作的是原字符串的副本,得到的是一个新的字符串。

  可变字符串 —— 本身能被修改。

  可变字符串修改的是原字符串,因此可变字符串的操作方法没有返回值。

 2> 初始化方法创建对象

  - (NSMutableString *)initWithString:(NSString *)format;

 3> 便利构造器创建对象

  + (NSMutableString *)stringWithString:(NSString *)format;

         // 初始化
NSMutableString *ms1 = [[NSMutableString alloc] initWithFormat:@"Hello world"];
// 便利构造器
NSMutableString *ms2 = [NSMutableString stringWithFormat:@"Hello kitty"];

5、NSMutableString方法

 1> 拼接字符串

  - (void)appendFormat:(NSString *)format, ...;

 2> 插入字符串

  - (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;

 3> 删除字符串

  - (void)deleteCharactersInRange:(NSRange)range;

 4> 替换字符串

  - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;

 5> 重置字符串

  - (void)setString:(NSString *)aString;

 // 1.拼接字符串
NSMutableString *ms3 = [NSMutableString stringWithFormat:@"-1"];
[ms3 appendString:@"软件38"];
NSLog(@"ms3 = %@", ms3);
// 2.插入字符串
[ms3 insertString:@"," atIndex:];
NSLog(@"ms3 = %@", ms3);
// 3.删除字符串
NSRange range4 = NSMakeRange(, );
[ms3 deleteCharactersInRange:range4];
NSLog(@"ms3 = %@", ms3);
// 4.字符串替换
NSMutableString *ms4 = [NSMutableString stringWithFormat:@"赵符以"];
[ms4 replaceCharactersInRange:NSMakeRange(, ) withString:@"-1"];
NSLog(@"ms4 = %@", ms4);
// 5.重置字符串
[ms4 setString:@"ruanjian38"];
NSLog(@"ms4 = %@", ms4);

 总结:

 1.可变对象通常是不可变对象的子类,包含父类所有方法,并且具有对原有对象的增、删、改功能。

 注:不可变字符串的修改方法有返回值。

   可变字符串的修改方法没有返回值。

 2.可变对象的增、删、改都是对自身对象的操作。不可变对象的增、 删、改都会生成新的对象,原对象不变。

iOS学习13之OC NSString类的更多相关文章

  1. iOS学习19之OC类的扩展

    为一个类扩展功能:1.子类化:2.修改源代码:3.定义协议:4.Category:类目 1.Category 1> Category的作用 Category:也叫分类,类目,是为没有源代码的类扩 ...

  2. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  3. IOS学习笔记2—Objective C—类、属性、方法

    以下是我学习IOS开发的一些笔记和心得,贴出来和大家一同分享,也希望大家能补充和纠错,共同进步 有Android和IOS开发问题也希望能和大家交流! Objective-C 1.OC是一门基于C的面向 ...

  4. iOS之02-第一个OC的类

    OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 第一个类的源码: /* 人 类名:Person 属性(成员变量\实例变量):体重.年龄 行为 ...

  5. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  6. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  7. iOS学习15之OC集合

    1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...

  8. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  9. iOS学习16之OC集合遍历和数组排序

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

随机推荐

  1. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

    大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM ...

  2. 内核中用于数据接收的结构体struct msghdr(转)

    内核中用于数据接收的结构体struct msghdr(转) 我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,pin ...

  3. No space left on device 解决Linux系统磁盘空间满的办法

    最近Linux电脑在执行mvn时候总是报错: No space left on device   原因是磁盘空间满了,我马上加了20G的硬盘容量,但是还是报错,上网查了一下,发现了解决方法,我用了其中 ...

  4. NYOJ题目436sum of all integer numbers

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr0AAAHKCAIAAACBiWRrAAAgAElEQVR4nO3dP1LjSts34G8T5CyEFB

  5. FastPolice项目总结

    This is the final homework for spatial information Mobile Service Lesson.It generally inclusived the ...

  6. Linux下第一次使用MySQL数据库,设置密码

    在终端下输入:/etc/rc.d/init.d/mysqld status 查看MySQL状态,看看是否运行. 没有运行的话就输入:/etc/rc.d/init.d/mysqld start 这时,就 ...

  7. drozer unknown module处理办法

    将目录切换到drozer安装目录,然后在执行:

  8. 使用PHP获取时间今天 明天 昨天 时间戳的详解

    使用php获取时间今天明天昨天时间戳 2013-06-20 11:12 <?php echo "今天:".date("Y-m-d")."< ...

  9. Android JNI开发生成.h头文件问题(转)

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

  10. 在Salesforce中将 Decimal 数据转换成美元格式

    闲言少叙,直接上代码(Apex Class 中的方法): private string ConvertToMoneyFormat(decimal price){ if (price == null | ...