您的位置:首页 > 移动开发 > IOS开发

iOS开发——oc——NSString的学习

2014-09-26 17:07 218 查看
NSString的基本认识

1、基本使用

/*
1、字符串的创建 (一般对象方法不用都是使用类方法)
直接赋值方式 (常用)
alloc 、initxxx 偶尔用
类方法 (常用):常用于拼接字符串、把基本数据类型转换为字符类型

注意: string是不可变字符串,如果初始化没有赋值,就会为空,不可添加,只能更改指向
*/
NSString *s1 = @"abcdef"; // 直接赋值
NSString *s2 = [[NSString alloc] initWithFormat:@"aabbcc%d",10]; //alloc、initxx
NSString *s3 = [NSString stringWithFormat:@"age is %d", 10];     //类方法
s1 =  @"abcdf"; // 直接修改指向

/*
2、对数据转换的操作
1》基本数据类型转换为字符串
2》常用结构体类型转换为字符串
3》oc和c字符串的转换
*/
// 基本数据类型转换为字符串
NSString *numStr = [NSString stringWithFormat:@"age is %d", 10]; // int类型转换为字符串类型
NSString *doubleStr = [NSString stringWithFormat:@"高度是: %.2f", 10.0]; // double转换为字符串类型

// 结构体转换为字符串类型(是函数方法,不是string对象或类方法)
CGRect rect = CGRectMake(10, 10, 10, 10);
NSString *rectStr =  NSStringFromRect(rect); // 结构体转换为字符串 (函数方法)

//oc 和 c 字符串相互转换
NSString *s4 = [[NSString alloc] initWithUTF8String:"abcd"];     // 将c字符串转换为 oc字符串
NSString *s5 = [NSString stringWithUTF8String:"abcd"];
const char *str5 = [s3 UTF8String];                               // oc转换为c字符串

/*
3、常用对其内容的操作
1》是否包含某个字符串->rangeOfString
2》遍历: length 、characterAtIndex
3》判断是否包含数字
*/

// 判断字符串是否包含某个字符串(根据location是否是:NSNotFound)
NSString  *str = @"abcd efgh jk";
NSRange range = [str rangeOfString:@"bc"];
if (range.location == NSNotFound) {
NSLog(@"没有");
}else{
NSLog(@"有");
}

NSLog(@"-----字符串的遍历,并输出-------------");
// 遍历,characterAtIndex 根据索引值获取对应的字母,返回是字符类型
str = @"我们";
NSLog(@"length = %zd", str.length); // 结构是:2 (返回的是字符个数,而不是字节数)

str = @"abcd 1 cd0e 2";
for (int i = 0; i<str.length; i++) {
NSLog(@"%d ,%c",i,[str characterAtIndex:i]);
}
NSLog(@"-----判断是否有数字,并取出-------------");

// 判断是否包含数字 ——》根据asc码表种数字对应的值来判断
for (int i = 0; i<str.length; i++) {
if ([str characterAtIndex:i] >= '0' && [str characterAtIndex:i] <= '9') { // 必须是字符类型,根据的是asc码表种数字对应的值来判断
NSLog(@"%c",[str characterAtIndex:i]);
}
}
/*
4、对文件的操作
1》文件的读取
2》文件的写入
*/
NSLog(@"-----读取操作文件(文本路径)-------------");
// 根据全路径,读取文本文件
NSString *path = @"/Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/readme.txt";
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"\n%@",content);

NSLog(@"-----读取操作网络资源(也可以读取文件)-------------");
/*
URL : 资源路径 (可以读取文本文件,但资源路径不可以有中文)
协议头://路径
file://文本路径 http://网址 */
NSURL *url = [NSURL URLWithString:@"file:///Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/readme.txt"]; // 不可包含汉字,且必须是全路径,包括后缀名
NSLog(@"有中文的url = %@",url); // url为空
content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"有中文——》\n%@",content);

url = [NSURL fileURLWithPath:@"/Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/readme.txt"]; // 如果确定是文本,可用这种方式()
NSLog(@"fileURLWithPath——》地址:\nurl = %@",url);
content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"fileURLWithPath——》读取的内容:\n%@",content);

url = [[NSURL alloc] initWithString:@"file:///Users/an1911/Desktop/readme.txt"];
NSLog(@"无中文——》url = %@",url);
content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"\n%@",content);
url = [NSURL URLWithString:@"http://www.baidu.com"];
//content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
// NSLog(@"\n%@",content);

NSLog(@"-----写入操作文本文件(对象方法)-------------");

NSString *writeStr = @"JAVA1\nJAVA2"; // 使用\n作为写入的换行
[writeStr writeToFile:@"/Users/an1911/Desktop/write.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

url =[NSURL fileURLWithPath:@"/Users/an1911/Desktop/write2.txt"];
// url = [NSURL URLWithString:@"file:///Users/an1911/Desktop/write2.txt"];
[writeStr writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];


2、可变字符串的基本使用

NSMutableString *str = [NSMutableString stringWithFormat:@"abcef"];
[str appendString:@" hi"]; //在后面添加新的字符串(不会返回新的字符串,而是在原来的基础上改变)
NSLog(@"%@",str);

NSRange range = [str rangeOfString:@"bc"];
//[str deleteCharactersInRange:NSMakeRange(2,3)]; //删除range范围的字符串,CGRangeMake没有这个
[str deleteCharactersInRange:range];
NSLog(@"%@",str);

// 注意NSString 的 方法,结果是返回一个新的字符串,但是原来的字符串没有改变
NSString *str2 = @"abcdef";
NSString *newStr2 = [str2 stringByAppendingString:@"12121"];
NSLog(@"%@",str2);
NSLog(@"%@",newStr2);


3、读取文件内容,并计算文件的总行的函数

NSUInteger  countRows(NSString *path){

// 1、创建文件管理对象
NSFileManager *manger = [NSFileManager defaultManager];

// 2、判断是文件夹还是文件,并获取是否存在这个路径
BOOL isDir = NO;
BOOL isExist = [manger fileExistsAtPath:path isDirectory:&isDir];

// 3、判断是否存在
if(!isExist) return 0; //如果不存在就直接返回

// 如果是文件夹
if (isDir) {

NSUInteger sumCount = 0; // 定义接收总行数的变量

// 1>获取文件夹内所有内容(文件夹 和 各种)
NSArray *contents = [manger contentsOfDirectoryAtPath:path error:nil];

// 循环数组
for (NSString *str in contents) {
// 2>拼接当前文件夹内的文件或文件夹的全路径
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path,str];
// 3>递归方式获取总行数
sumCount +=  [CountRowsOfManyFile countRows:fullPath];
}

return sumCount;

}else{ // 如果是文件

// 判断文件的拓展名,只有是m和h后缀的可以通过 (拓展可能是大小写,避免小写的影响,一律转换为大写)
NSString *extension = [[path pathExtension] uppercaseString];

if ([extension isEqualToString:@"H"] || [extension isEqualToString:@"M"]) { //if (extension == "H" || extension == "M")

// 1>获取文件的内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 2>计算内容的行数(分成数组、计算数组个数)
NSArray *array = [content componentsSeparatedByString:@"\n"];

// 3> 为了输出方便看,把公共的文件夹路径取消
NSRange range = [path rangeOfString:@"/Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/"]; // 截取公共的文件夹路径范围
// NSString *newPath = [path substringFromIndex:range.length]; // 从index开始,取后面的(不包括当index)
NSString *newPath =[path stringByReplacingCharactersInRange:range withString:@""];

NSUInteger count = array.count;
NSLog(@"%@  :%zd", newPath, count);

return count;

}else{

return 0;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息