NSString

来源:互联网 发布:java获取浏览器地址 编辑:程序博客网 时间:2024/05/16 07:27

1.NSString的导入和导出

//

//  main.m
//  NSString
//
//  Created by mj on 13-4-5.
//  Copyright (c) 2013年 itcast. All rights reserved.
//


#import <Foundation/Foundation.h>


#pragma mark NSString的创建
void stringCreate() {
    // char *s = "A String!"; // C语言中的字符串
    
    // 这种方式创建出来的字符串是不需要释放的
    NSString *str1 = @"A String!";
    
    NSString *str2 = [[NSString alloc] init];
    str2 = @"A String!";
    [str2 release];
    
    NSString *str3 = [[NSString alloc] initWithString:@"A String!"];
    [str3 release];
    // 不需要管理内存
    str3 = [NSString stringWithString:@"A String!"];
    
    
    NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"];
    [str4 release];
    str4 = [NSString stringWithUTF8String:"A String!"];
    
    NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", 19, 1.55f];
    
    // 这句代码放在中间会造成2个错误:
    // 1.前面创建的字符串没有被释放
    // 2.后面创建的字符串会释放过度,造成野指针错误
    // str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f];
    
    NSLog(@"str5:%@", str5);
    [str5 release];
    
    str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f];
}


void test(NSString **str) {
    *str = @"123";
    // s = @"123";
}


void stringCreate2() {
    // 从文件中读取文本
    NSString *path = @"/Users/apple/Desktop/test.txt";
    // 这个方法已经过期,不能解析中文
    // NSString *str1 = [NSString stringWithContentsOfFile:path];
    
    // 定义一个NSError变量
    NSError *error;
    // 指定字符串编码为UTF-8: NSUTF8StringEncoding
    NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    if (error == nil) { // 没有错误信息
        NSLog(@"读取文件成功:%@", str1);
    } else {
        NSLog(@"读取文件失败:%@", error);
    }
    
    NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"];
    NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@", str2);
    
    NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"];
    NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@", str3);
}


#pragma mark 字符串的导出
void stringExport() {
    NSString *str = @"123456我是字符串!!!!";
    // 如果文件不存在,会自动创建文件
    // 如果文件夹不存在,会直接报错
    NSString *path = @"/Users/apple/Desktop/abc.txt";
    
    NSError *error;
    // 编码指定错误也会报错
    // YES代表要进行原子性操作,也就是会创建一个中间的临时文件
    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error) {
        // [error localizedDescription]会返回主要的错误信息
        NSLog(@"写入失败:%@", [error localizedDescription]);
    } else {
        NSLog(@"写入成功");
    }
}


//void test2(int *p) {
//    *p = 9;// a = 9;
//}


int main(int argc, const char * argv[])
{


    @autoreleasepool {
//        int a = 10;
//        test2(&a);
//        NSLog(@"%i", a);
        
        stringExport();
        
//        NSString *s = @"456";
//        
//        test(&s);
//        
//        NSLog(@"%@", s);
    }
    return 0;

}



2.NSString其他用法

//
//  main.m
//  Foundation4-NSString其他用法
//
//  Created by mj on 13-4-5.
//  Copyright (c) 2013年 itcast. All rights reserved.
//


#import <Foundation/Foundation.h>


#pragma mark 字符串的大小写处理
void caseTest() {
    NSString *str = @"GuangDong";
    // 转成大写
    NSLog(@"大写:%@", [str uppercaseString]);
    // 转成小写
    NSLog(@"小写:%@", [str lowercaseString]);
    // 首字母变大写,其他字母变小写
    NSLog(@"首字母变大写:%@", [@"aGE" capitalizedString]);
}


#pragma mark 字符串的比较
void compare() {
    // 检测字符串的内容是否相同
    BOOL result = [@"abc" isEqualToString:@"abc"];
    NSLog(@"%i", result);
    
    // NSOrderedAscending  右边的字符串比左边大
    // NSOrderedSame  两个字符串的内容相同
    // NSOrderedDescending  左边的字符串比右边的大
    NSComparisonResult result2 = [@"abc" compare:@"Abc"];
    if (result2 == NSOrderedSame) {
        NSLog(@"两个字符串的内容相同");
    } else if (result2 == NSOrderedAscending) {
        NSLog(@"右边 > 左边");
    } else if (result2 == NSOrderedDescending) {
        NSLog(@"右边 < 左边");
    }
}


#pragma mark 字符串的搜索
void search() {
    NSString *str = @"123456456.txt";
    
    NSLog(@"是否以22开头:%i", [str hasPrefix:@"22"]);
    NSLog(@"是否以txt结尾:%i", [str hasSuffix:@"txt"]);
    
    // 搜索字符串
    NSRange range = [str rangeOfString:@"456"];
    // range.length == 0
    if (range.location == NSNotFound) {
        NSLog(@"不能找到");
    } else {
        NSLog(@"找到的范围是:%@", NSStringFromRange(range));
    }
    
    // 从尾部开始搜索字符串
    range = [str rangeOfString:@"456" options:NSBackwardsSearch];
    NSLog(@"%@", NSStringFromRange(range));
    
    // 指定范围进行搜索
    // [str rangeOfString:@"456" options:NSBackwardsSearch range:<#(NSRange)#>];
}


#pragma mark 字符串的截取
void subString() {
    NSString *str = @"123456";
    
    // 从索引3开始截取到尾部(包括3)
    NSLog(@"%@", [str substringFromIndex:3]);
    
    // 从头部开始截取到索引3之前(不包括3)
    NSLog(@"%@", [str substringToIndex:3]);
    
    // 指定范围进行截取
    NSRange range = NSMakeRange(2, 3);
    NSLog(@"%@", [str substringWithRange:range]);
    
    NSString *str2 = @"a-b-c-d-5";
    NSArray *array = [str2 componentsSeparatedByString:@"-"];
    NSLog(@"%@", array);
    
    NSString *str3 =  [array objectAtIndex:0];
    NSLog(@"%@", str3);
}


#pragma mark 与路径相关
void pathTest() {
    // 快速创建一个自动释放的数组
    NSMutableArray *components = [NSMutableArray array];
    [components addObject:@"Users"];
    [components addObject:@"MJ"];
    [components addObject:@"Desktop"];
    // 将数组中的所有字符串拼接成一个路径
    NSString *path = [NSString pathWithComponents:components];
    NSLog(@"%@", path);
    
    // 将路径分解成一个数组
    NSArray *cmps = [path pathComponents];
    NSLog(@"%@", cmps);
    
    // path是一个字符串常量,是不可变的
    path = @"/users/mj/test";
    // 判断是够为绝对路径(依据是前面有无/)
    NSLog(@"%i", [path isAbsolutePath]);
    NSLog(@"最后一个目录:%@", [path lastPathComponent]);
    // 删除最后一个目录
    NSLog(@"%@", [path stringByDeletingLastPathComponent]);
    // 在最后面拼接一个目录
    NSLog(@"%@", [path stringByAppendingPathComponent:@"abc"]);
}


#pragma mark 拓展名处理
void extension() {
    NSString *str = @"/User/MJ/test.txt";
    
    NSLog(@"拓展名:%@", [str pathExtension]);
    // 删除拓展名
    NSLog(@"%@", [str stringByDeletingPathExtension]);
    // 添加拓展名
    NSLog(@"%@", [@"abc" stringByAppendingPathExtension:@"mp3"]);
}


#pragma mark 其他用法
void other() {
    NSString *str = @"12";
    int a = [str intValue];
    NSLog(@"%i", a);
    
    // 计算字数,不是计算字符数
    NSLog(@"length=%zi", [@"我是字符串123" length]);
    
    // 取出对应的字符
    unichar c = [@"abc" characterAtIndex:0];
    NSLog(@"%c", c);
    
    // 返回C语言中的字符串
    const char *s = [@"abc" UTF8String];
    NSLog(@"%s", s);
}


int main(int argc, const char * argv[])
{


    @autoreleasepool {
        other();
    }
    return 0;
}


3.NSMutableString可变字符串的使用

//
//  main.m
//  Foundation5-NSMutableString
//
//  Created by mj on 13-4-5.
//  Copyright (c) 2013年 itcast. All rights reserved.
//


#import <Foundation/Foundation.h>


#pragma mark 可变字符串的创建
void stringCreate() {
    // 预先分配10个字数的存储空间
    NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
    // 设置字符串内容
    [str setString:@"1234"];
    
    // 拼接一个字符串
    [str appendString:@"567"];
    // 拼接字符串
    [str appendFormat:@"age is %i and height is %.2f", 27, 1.55f];
    
    // 替换字符串
    NSRange range = [str rangeOfString:@"height"];
    //NSRange range = NSMakeRange(7, 3);
    [str replaceCharactersInRange:range withString:@"no"];
    
    // 插入字符串
    [str insertString:@"abc" atIndex:2];
    
    // 删除字符串
    range = [str rangeOfString:@"age"];
    [str deleteCharactersInRange:range];
    
    NSLog(@"%@", str);
    
    // 释放对象
    [str release];
}


int main(int argc, const char * argv[])
{
    @autoreleasepool {
        stringCreate();
    }
    return 0;
}

0 0