// 创建NSString的常用方法
+ (void)NSStringCreateMethod
{
// 字符串常量 类似于 char *p = "Hello world";
// NSString的对象,里面的内容(字符串)一旦创建,就不能再被改变。
// string,是一个指向对象的指针,在OC/IOS里,操作对象,就是指向对象的指针。(string,就是对象),对象自己拥有很多的成员方法调用。每一个NSString的对象,都有这些方法。
// p是一个指向C字符串的指针(C数组),C库提供了很多的字符串相关的函数,这些函数并不属于任何一个C字符串。
NSString *string = @"Hello world";
// 用%@,来打印对象
NSLog(@"string = %@",string);
// 用一个string对象的内容(字符串),来初始化string1。
NSString *string1 = [[NSString alloc] initWithString:string];
NSLog(@"string1 = %@",string1);
// 用一个string对象的内容,来创建string2; initWithString:对应的加方法。
// 注意:每一个initWithXxxx常对应一个aaaaWithXxxx
NSString *string2 = [NSString stringWithString:string];
NSLog(@"string2 = %@",string2);
// 用一个C字符串采用UTF8编码格式,来初始化string3。
NSString *string3 = [[NSString alloc] initWithUTF8String:"Hello world"];
NSLog(@"string3 = %@",string3);
// 对应的加方法,用一个C字符串,来创建string4
NSString *string4 = [NSString stringWithUTF8String:"Hello world"];
NSLog(@"string4 = %@",string4);
// 用一个C字符串,使用NSUTF8StringEncoding(就是UTF8编码),来初始化string5。相当于initWithUTF8String:
NSString *string5 = [[NSString alloc] initWithCString:"Hello world" encoding:NSUTF8StringEncoding];
NSLog(@"string5 = %@",string5);
// 对应的加方法
NSString *string6 = [NSString stringWithCString:"Hello world" encoding:NSUTF8StringEncoding];
NSLog(@"string6 = %@",string6);
// NSLog(NSString *format, ...);
// printf(const char *restrict, ...);
// sprintf(char *restrict, const char *restrict, ...);
// 用一个格式化的内容,来初始化string7,类似sprintf
NSString *string7 = [[NSString alloc] initWithFormat:@"Hello world %@ %d %s %.2f OK",string, 18, "good", 3.14];
NSLog(@"Hello world %@ %d %s %.2f OK",string, 18, "good", 3.14);
NSLog(@"string7 = %@",string7);
// 对应的加方法
NSString *string8 = [NSString stringWithFormat:@"%d %c",1024,'X'];
NSLog(@"string8 = %@",string8);
}
/*
+ (id)stringWithString:(NSString *)string
{
return [[NSString alloc] initWithString:string];
}
*/
+ (void)NSStringSimpleMethod
{
NSString *string = @"Hello world";
// 获取字符串对象的长度(这个对象里保存的字符串的长度)
NSLog(@"%lu",[string length]);
// OC字符串的长度,指的是OC字符串里,元素的个数。
NSString *string1 = @"不作死,就不会死";
// NSString *string1 = [NSString stringWithUTF8String:"不作死,就不会死"];
NSLog(@"%lu",[string1 length]);
// 获取OC字符串里,对应索引(下标)的元素。
// OC数组里,保存的实际上并不是C的字符串,而是unichar的数组。unsigned short,一个元素占两个字节。'l':006C, '死': 6b7b
// OC的数组里,就不是C字符串,所以,就不需要有尾0.
unichar c = [string characterAtIndex:2];
// unichar 我们用%C来打印
NSLog(@"c = %C",c);
c = [string1 characterAtIndex:2];
NSLog(@"c = %C,%x",c,c);
// __NSCFConstantString __NSCFString
// 看到崩溃日志,characterAtIndex:崩溃调用的类是如上两个,实际有多个。说明了,NSString,是由类簇来实现的,像由类簇实现的类,我们不能去继承。
// 获取下标为8的元素,会崩溃,因为OC数组每个元素都是unichar格式的,不需要有尾0
// [string1 characterAtIndex:8];
// [string1 characterAtIndex:[string1 length]];
// 注意,上面的方法不用get,因为get在OC/IOS的方法命名里尤其特殊的用法
unichar buf[10] = {0};
// get在OC/IOS命名里面的用法如下,不是通过返回值返回,而是通过函数的参数返回内容,用get这个单词。
// 将一个range范围的内容,返回到buf里面去(不要越界)。
[string1 getCharacters:buf range:NSMakeRange(2, 6)];
for (int i=0; buf[i]!=0; i++) {
NSLog(@"buf[%d] = %C",i,buf[i]);
}
// 返回一个所有字符都大写的新的字符串对象
// NSString这个字符串对象,一旦创建,就无法改变其内容了。
// 因此这个方法,并不是将string的所有字符大写,而是创建一个所有字符多大写的新的对象,返回。
NSString *string2 = [string uppercaseString];
NSLog(@"string = %@",string);
NSLog(@"string2 = %@",string2);
// 返回一个所有字符都小写的新的字符串对象
NSString *string3 = [string2 lowercaseString];
NSLog(@"string3 = %@",string3);
// 返回一个所有单词首字符大写,其他字符都小写的新的字符串对象
NSString *string4 = [@"helloworld,abc doyou do" capitalizedString];
NSLog(@"string4 = %@",string4);
// 返回从index下标开始,一直到结束的子串(新的字符串对象)。
// 注意,它包含index下标的字符
NSString *string5 = [string4 substringFromIndex:[@"hello" length]];
NSLog(@"string5 = %@",string5);
// 返回从头开始,到index下标结束的子串(新的字符串对象)。
// 注意,它不包含index下标的字符
NSString *string6 = [string4 substringToIndex:5];
NSLog(@"string6 = %@",string6);
// 返回一个从下标为3开始,长度为4的子串(新的字符串对象)。
NSString *string7 = [string4 substringWithRange:NSMakeRange(3, 4)];
NSLog(@"string7 = %@",string7);
// 返回string4对应的"world"字符串的范围,如果找到了,返回的是对应的下标和长度,找不到返回NSNotFound
NSRange range = [string4 rangeOfString:@"world"];
// 将一个range,转换成一个NSString的对象。
NSLog(@"range = %@",NSStringFromRange(range));
range = [string4 rangeOfString:@"world"];
// 如果range.location等于NSNotFound,则表示没有找到
// NSNotFound 是long的最大值
if (range.location != NSNotFound) {
NSLog(@"找到了,range = %@",NSStringFromRange(range));
} else {
NSLog(@"没找到,range = %@",NSStringFromRange(range));
}
// string是一个指针,保存一个字符串对象的地址而已。
// 不能变的是string指针指向的NSString类型的对象的内容不能变。
string = @"http://192.168.88.8";
NSLog(@"string = %@",string);
// 判断string字符串,是否以@"http"开头,是返回YES(1),否则返回NO(0)
if ([string hasPrefix:@"http"]) {
NSLog(@"这是一个网址!");
}
// 判断@"北京.mp3"字符串,是否以@"mp3"结尾,是返回YES(1),否则返回NO(0)
if ([@"北京.mp3" hasSuffix:@"mp3"]) {
NSLog(@"这是一个音乐!");
}
// 将一个字符串对象转换为一个整数/浮点数...
NSLog(@"%d",[@" -123abc" intValue]);
NSLog(@"%.2f",[@" 3.14abc" floatValue]);
}
+ (void)NSStringCompareMethod
{
NSString *string = @"Hello world";
NSString *string1 = @"hello world";
// is, has 开头,一般返回的BOOL
// 比较string和string1两个字符串的内容是否相等。
if ([string isEqualToString:@"Hello world"]) {
NSLog(@"相等");
}
/* compare: 返回值是一个枚举类型,有如下三个枚举
NSOrderedAscending = -1L, 升序
NSOrderedSame, 同序
NSOrderedDescending 降序
返回值从string,到string1,是一个什么增长顺序
*/
if ([string compare:string1] == NSOrderedAscending) {
NSLog(@"升序!");
}
if ([@"abc" compare:@"ABC"] == NSOrderedDescending) {
NSLog(@"降序!");
}
// 不区分大小写比较
if ([string caseInsensitiveCompare:string1] == NSOrderedSame) {
NSLog(@"不区分大小写,他们相等!");
}
// 比较string和string1,带比较的参数。
// 如果options的值为NSCaseInsensitiveSearch,就等价于caseInsensitiveCompare: 这个方法
if ([string compare:string1 options:NSCaseInsensitiveSearch] == NSOrderedSame) {
NSLog(@"不区分大小写,他们相等!");
}
if ([@"hello123.txt" compare:@"hello5.txt"] == NSOrderedAscending) {
NSLog(@"升序");
}
// 将字符串里的数字字符,当做一个数值去比较 (123>5)
if ([@"hello123.txt" compare:@"hello5.txt" options:NSNumericSearch] == NSOrderedDescending) {
NSLog(@"降序");
}
// 比较这两个字符串,既不区分大小写,又降数字字符当做整数去比较。
if ([@"HELLO123.txt" compare:@"hello5.txt" options:NSCaseInsensitiveSearch|NSNumericSearch] == NSOrderedDescending) {
NSLog(@"确实是降序!");
}
}
/*
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask
{
switch (mask)
{
case NSCaseInsensitiveSearch: 0000 0001
xxxx;
break;
case ....:
...
break;
case NSNumericSearch: 0100 0000
yyyy;
break;
case NSCaseInsensitiveSearch|NSNumericSearch:
0100 0001
zzzz;
brea;
}
return ...
}
*/
// NSString这个类实例的字符串对象,一旦初始化完成,就不能再改变了。 NSMutableString它是可以改变的。
// @interface NSMutableString : NSString NSMutableString是继承与NSString的,说明,NSString里的方法,NSMutableString都可以用。
+ (void)NSMutableStringCreateMethod
{
NSString *string = @"Hello world";
// 用string的内容,来初始化一个可变的string1字符串。
// 这个方法,我们也常说成是,将一个不可变字符串,转成可变字符串。(实际上是创建了一个新的可变字符串对象,只不过里面的内容,是原来的内容)
NSMutableString *string1 = [[NSMutableString alloc] initWithString:string];
NSLog(@"string1 = %@",string1);
// 用对应的加方法 (注意,参数是NSString类型,但我们传了一个NSMutableString的对象)
// 父类的指针,可以指向子类的对象,被称为赋值兼容原则。
// 这样的赋值是安全的。
// 但反过来,是不允许的,这样的赋值是不安全的。
NSMutableString *string2 = [[NSMutableString alloc] initWithString:string1];
NSLog(@"string2 = %@",string2);
// 我们从来不再NSString用这俩方法,但NSMutableString就可以用了。
// 创建了两个字符串对象,但字符串对象里的内容为空。
// NSString *string3 = [[NSString alloc] init];
// NSString *string4 = [NSString string];
// 注意,和NSString *string5 = nil; 是不一样的。
// 创建一个空的可变字符串
NSMutableString *string3 = [[NSMutableString alloc] init];
// 判断字符串内容为空的方法
if ([string3 length] == 0) {
NSLog(@"字符串的内容为空");
}
NSMutableString *string4 = [NSMutableString string];
// 另外一种判断字符串内容为空的方法
if ([string4 isEqualToString:@""]) {
NSLog(@"字符串的内容为空");
}
// NSMutableString 自己的创建字符串的方法
// 创建一个预设字符串长度为10的可变字符串对象,注意,此时字符串的内容为空。
// 如果说,我们创建的字符串对象,能提前确认他的元素的话,我们习惯用initWithCapacity:方法,来预设一个长度。这样的话,效率更高一些。
NSMutableString *string5 = [[NSMutableString alloc] initWithCapacity:10];
NSLog(@"%lu",[string5 length]);
// 对应的加方法
NSMutableString *string6 = [NSMutableString stringWithCapacity:10];
NSLog(@"%lu",[string6 length]);
}
+ (void)NSMutableStringSimpleMethod
{
// 对于可变字符串来说,他的方法就是,增加,删除,修改,插入。
NSMutableString *string = [[NSMutableString alloc] init];
// 追加 (在string的尾部,追加一个字符串的内容)
[string appendString:@"Hello"];
NSLog(@"string = %@",string);
// 在string的尾部,追加一个格式化的字符串内容。
[string appendFormat:@"%cworld %d",' ',100];
NSLog(@"string = %@",string);
// 插入
// 将@"are"字符串,插入到下标为5的位置
[string insertString:@"are" atIndex:5];
NSLog(@"string = %@",string);
// 将@"Good"字符串,插入到最前面。
[string insertString:@"Good" atIndex:0];
NSLog(@"string = %@",string);
// 可以进行尾插,相当于追加字符串。 (但不能没有节操)
[string insertString:@"Bye" atIndex:[string length]];
NSLog(@"string = %@",string);
// 替换
// 将Hello开始,到100结束的内容,替换成空格
// GoodHelloare world 100Bye
// NSRange range = [string rangeOfString:@"Helloare world 100"];
// [string replaceCharactersInRange:range withString:@" "];
NSRange range1 = [string rangeOfString:@"Hello"];
NSRange range2 = [string rangeOfString:@"100"];
NSRange range = NSMakeRange(range1.location, range2.location+range2.length-range1.location);
[string replaceCharactersInRange:range withString:@" "];
NSLog(@"替换string = %@",string);
// 删除
range = [string rangeOfString:@" "];
// 删除一个range区域的内容
[string deleteCharactersInRange:range];
NSLog(@"string = %@",string);
// 重设字符串的内容,用一个字符串的内容,重设string里的内容。
[string setString:@"Hello world"];
// 注意,不等价于string = @"Hello world";
NSLog(@"string = %@",string);
}