可变字符与不可不可变字符串的心得

字符串从我接触OC开始就在用它,但是至始至终都没整明白这是个什么东东! 现在学到了这一块儿的知识,经过两天的学习,逐渐的理清楚了一些关于Nsstring和NsMutablestring的一些问题!现在我把它给梳理出来了,供各位大神们知道!

第一个是不可变字符串Nsstring的介绍:

首先是不可变字符串的创建

 1 //1、不可变字符串的创建
 2         //快速创建
 3         NSString *str = @"这是不可变数组的快速创建";
 4         NSLog(@"%@",str);
 5         //通过allock格式化字符串创建
 6         int a = 100 ;
 7         NSString *str1 = [[NSString alloc]initWithFormat:@"%d",a];
 8         NSLog(@"这是通过allock格式化字符串创建:%@",str1);
 9         //通过格式化符创建
10         NSString *str2 = [NSString stringWithFormat:@"这是通过格式化符创建的字符串,属于类方法"];
11         NSLog(@"%@",str2);

第二个是不可变字符串的方法

  1 //1、字符串比较
  2
  3         NSString *str3 = [NSString stringWithFormat:@"abc"];
  4         NSString *str4 = [NSString stringWithFormat:@"abc"];
  5         if ((str3 = str4)) {
  6             NSLog(@"%p %p",str4,str3);//比较的字符串地址
  7         }
  8   //Xcode7.1中的一个bug 输出结果是两个字符串的地址相同 理论上两个字符串的地址是不一样的
  9
 10
 11 //2、字符串内容的比较
 12         int c = 100;
 13         int c1 = 200;
 14         NSString *str5 = [[NSString alloc]initWithFormat:@"%d",c];
 15         NSString *str6 = [[NSString alloc]initWithFormat:@"%d",c1];
 16         BOOL isSame =[str5 isEqualToString: str6 ];
 17         if (isSame) {
 18             NSLog(@"这是字符串内容的比较");
 19         }
 20
 21 //3、比较字符串大小
 22         NSString *str7 = [NSString stringWithFormat:@"xiao"];
 23         NSString *str8 = [NSString stringWithFormat:@"qiang"];
 24         NSComparisonResult result = [str7 caseInsensitiveCompare:str8];
 25         if (result ==NSOrderedSame) {
 26             NSLog(@"字符串大小比较:一样");
 27         }else if (result == NSOrderedAscending){
 28             NSLog(@"字符串大小比较:升序");
 29
 30         }else if (result == NSOrderedDescending)
 31             NSLog(@"字符串大小比较:降序");
 32
 33 //4、输出字符串长度
 34         NSString *str9 = [NSString stringWithFormat:@"亲爱的,我爱你!"];
 35         long len =[str9 length];
 36         NSLog(@"输出字符串长度为:%ld",len);
 37
 38 //5、大小写转换
 39         NSString *str10 = [NSString stringWithFormat:@"i love Keke"];
 40         NSLog(@"全部变成大写字母%@",[str10 uppercaseString]);
 41         NSLog(@"全部变成小写字母%@",[str10 lowercaseString]);
 42         NSLog(@"首字母大写%@",[str10 capitalizedString]);
 43
 44 //6、转换为基本数据了类型
 45         NSString *str11 = [NSString stringWithFormat:@"15"];
 46         int j = [str11 intValue];//整型转换
 47         NSLog(@"由nsstring转换成整型%d",j);
 48         NSString *str12 = [NSString stringWithFormat:@"13"];
 49         float k = [str12 floatValue];
 50         NSLog(@"由nsstring转换成浮点型%.2f",k);
 51         NSString *str13 = [NSString stringWithFormat:@"10"];
 52         BOOL flag = [str13 boolValue];
 53         NSLog(@"由nsstring转换成BOOL型%d",flag);
 54
 55
 56  //7、字符串分割
 57         NSString *str14 = [NSString stringWithFormat:@"i,love,keke"];
 58         NSArray *array = [str14 componentsSeparatedByString:@","];
 59         NSLog(@"字符串的分割%@",array);//以" , "为分割点对字符串分割,在分割点后自动输出换行
 60
 61 //8、访问指定字符串位置
 62         NSString *str15 = [NSString stringWithFormat:@"nishiwodexiaoyaxiaopingguo"];
 63         char car = [str15 characterAtIndex:10];
 64         NSLog(@"访问指定字符串位置%c",car);
 65
 66 //9、字符串的截取输出
 67         NSString *str16 = [NSString stringWithFormat:@"nishiwodexiaoyaxiaopingguo"];
 68         NSString *string16 =[str16 substringFromIndex:10];
 69         NSLog(@"从指定位置开始截取至末尾%@",string16);//从指定位置开始截取,直到字符串末尾
 70
 71         // 9.2
 72         NSString *str17 = [NSString stringWithFormat:@"nishiwodexiaoyaxiaopingguo"];
 73         NSString *string17 = [str17 substringToIndex: 15 ];
 74         NSLog(@"从开头截取至指定位置,不包含该位置%@",string17);//从开头开始截取至指定位置,但是不包括该位置
 75         //9.2
 76         NSString *str18 = [NSString stringWithFormat:@"nishiwodexiaopingguo"];
 77         NSRange rang = NSMakeRange(0, 5);
 78         NSString *str19 = [str18 substringWithRange:rang];
 79         NSLog(@"指定范围截取%@",str19);// 截取指定范围的字符
 80
 81
 82 //10、字符串的拼接
 83         //第一种拼接实现方式
 84         NSString *str20 =[NSString stringWithFormat:@"Hello"];
 85         NSString *str21 =@"world";
 86         NSString *str22 =[str20 stringByAppendingFormat:@"%@",str21];
 87         NSLog(@"第一种拼接实现方式%@",str22);
 88         //第二种拼接实现方式
 89         NSString *str23 = [str20 stringByAppendingString:str21];
 90         NSLog(@"第二种拼接实现方式%@",str23);
 91         //第三种拼接方式
 92        NSString *str24 = [NSString stringWithFormat:@"%@ %@",str20,str21];
 93         NSLog(@"第三种拼接实现方式%@",str24);
 94
 95
 96 //11、查找
 97         NSString *str25 = @"[email protected]";
 98         NSString *str26 = @"q.com";
 99         NSRange range = [str25 rangeOfString: str26];
100         if (range.location != NSNotFound ) {
101             NSLog(@"已找到");//查找想对应的字符
102         }
103
104 //12、替换
105         NSString *str27 = [str25 stringByReplacingOccurrencesOfString:@"q.com" withString:@"163.com"];
106         NSLog(@"替换字符%@",str27);
107       

接下来是可变字符串

首先,同样是字符串的创建

1 可变数组的创建
2         NSMutableString *mstr = [NSMutableString stringWithString:@"这是可变数组的创建"];
3         NSLog(@"%@",mstr);
4         //似乎只有这一种创建方式
5         

第二,既然是可变数组那么肯定有其可变的地方

 1 //可变数组的  插入 删除 追加字符串
 2         NSMutableString *str28 = [NSMutableString stringWithFormat:@"World"];
 3         [str28 insertString:@" Hello" atIndex:0];
 4         NSLog(@"在可变数组中的指定位置前添加字符%@",str28);
 5
 6         NSMutableString *str29 = [NSMutableString stringWithFormat:@"My world"];
 7         NSRange rang1 = NSMakeRange(0, 3);
 8         [str29 deleteCharactersInRange:rang1];
 9         NSLog(@"删除指定范围的字符串%@",str29);
10
11         NSMutableString *str30 = [NSMutableString stringWithFormat:@"字符串"];
12         [str30 appendString:@"追加"];
13         NSLog(@"在字符串后面追加字符%@",str30);
14     }

以上是关于字符串的浅谈,仅仅只是一些残缺不全的知识点整合,有不足之处,求大神指点出来

时间: 2024-12-27 08:52:42

可变字符与不可不可变字符串的心得的相关文章

测试可变字符序列stringBuilder

测试可变字符序列 stringBuilder(线程不安全,效率高,一般用),stringBuffer(线程安全,效率低)stringBuilder,stringBuffer和string的区别前者可变,后者不可变,因为后者类中用的是final,定死了 1 public class Test01 { 2 public static void main(String[] args){ 3 4 StringBuilder sb=new StringBuilder();//创建了初始长度为16的字符数组

Java的——String类、StringBuffer和StringBuilder、不可变和可变字符序列使用陷阱

Java的知识点21--String类.StringBuffer和StringBuilder.不可变和可变字符序列使用陷阱 原文链接 https://blog.csdn.net/qq_39368007/article/details/84033272 String类 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为"不可变对象" substring()是对字符串的截取操作,但本质是读取原字符串内容生成了新的字符串. String测试代码 pac

1.字符型值不可变

目录 关于 js 基本类型与引用类型(堆内存.栈内存的理解) 1. 基本类型 2. 引用类型 1. 引用类型的值是可变的 2. ** 同时保存在栈内存和堆内存 ** 3. ** 引用类型的比较是引用的比较 ** 4. 对象赋值 关于 js 基本类型与引用类型(堆内存.栈内存的理解) ECMAScirpt 变量有两种不同的数据类型:** 基本类型,引用类型 **. 也有其他的叫法,比如 ** 原始类型 ** 和 ** 对象类型 ,拥有方法的类型和不能拥有方法的类型, 还可以分为 可变类型 ** 和

【转载】从键盘输入字符串并输出该字符串(汇编程序)

原文地址http://blog.sina.com.cn/s/blog_4b7bd3380100a76z.html 1 DATAS SEGMENT 2 STR DB"please input a string:$" 3 BUF DB 20 4 DB ? 5 DB 20 DUP (?) 6 CRLF DB 0AH,0DH,"$";此处输入数据段代码 7 DATAS ENDS 8 STACKS SEGMENT STACK 9 DB 200 DUP(?) ;此处输入堆栈段代

Python坑系列:可变对象与不可变对象

在之前的文章 http://www.cnblogs.com/bitpeng/p/4748148.html 中,大家看到了ret.append(path) 和ret.append(path[:])的巨大差别.这和Python的对象机制有关.现在谈谈这个问题! 我们知道,Python有可变对象和不可变对象,他们的表现行为也迥然不同.先来几个简单的问题: 1 def foo1(arg): 2 arg = 5 3 print(arg) 4 5 x = 1 6 foo(x) # 输出5 7 print(x

linux 可变类型与不可变类型

Python的每个对象都分为可变和不可变,主要的核心类型中,数字.字符串.元组是不可变的,列表.字典是可变的. 可变类型和不可变类型有些地方区别很大,注意区分. 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收). 不可变类型 以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象. 可以

python中的可变参数和不可变参数

知识点:Python中,万物皆对象. python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址. 一.可变对象和不可变对象 Python在heap中分配的对象分成两类:可变对象和不可变对象.所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变. 不可变(immutable):int.字符串(string).float.(数值型number).元组(tuple) 可变(mutable):字典型(dictionary).列表型(list) 不可变类型特点: 看下面的

Python中的可变对象和不可变对象

本文和大家分享的主要是python中可变对象与不可变对象相关内容,一起来看看吧,希望对大家学习python有所帮助. 什么是可变/不可变对象 · 不可变对象,该对象所指向的内存中的值不能被改变. 当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. · 可变对象,该对象所指向的内存中的值可以被改变. 变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是 原地改

Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:

OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向.当对NSString对象做深拷贝时,如果是copy复制方式,其实就是浅复制,只是复制了同一个对象的指针:如果是mutableCopy复制方式,系统会分配一个新的内存空间用来存放复制出来的NSMutableString对象,此时地址是新的,内容是一样的,他们正在被不同的实例变量字符串指针指着. 可变对象: