黑马程序员--ios基础--oc-foundation--NSString,NSArray与计算代码行数的练习

时间:2022-07-08 00:29:50

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

1. 结构体

在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发。常用的结构体有NSRange、NSPoint、NSSize、NSRect等

//
// Created by 裴涛涛 on 15/5/11.
// Copyright (c) 2015年 裴涛涛. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);

NSSize s1 = CGSizeMake(33, 44);
NSSize s2 = NSMakeSize(35, 21);
CGSize s3 = NSMakeSize(90, 80);

CGRect r1 = CGRectMake(0, 0, 20, 84);

NSString *tt = NSStringFromRect(r1);

NSLog(@"%@",tt);

return 0;
}


void range()
{
// NSRange r3 = NSMakeRange(2, 4);

NSString *str = @"i love oc";



NSRange range = [str rangeOfString:@"ptt"];

NSLog(@"loc = %ld, length = %ld",range.location,range.length);
}


2.字符串

不可变字符串
在ObjC中字符串操作要比在C语言中简单的多,在下面的例子中你将看到字符串的初始化、大小写转化、后缀前缀判断、字符串比较、字符串截取、字符串转换等,通过下面的例子我们基本可以掌握常用的字符串操作(注意这些内容虽然基本,但却是十分常用的操作,需要牢记):

可变字符串

我们知道在字符串操作过程中我们经常希望改变原来的字符串,当然这在C语言中实现比较复杂,但是ObjC为我们提供了新的可变字符串类NSMutableString,它是NSString的子类。


3.数组

不可变数组

常用的数组操作:初始化、数组对象的方法执行、数组元素的遍历、在原有数组基础上产生新数组、数组排序等

注意点

NSArray中只能存放对象,不能存放基本数据类型。

数组中的元素后面必须加nil以表示数据结束

//  Copyright (c) 2015年 裴涛涛. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
Person *p = [[Person alloc] init];
//
NSArray *array = @[p,@"ptt 5",@"zaixiang"];
// for (int i = 0; i < array.count; i++) {
// NSLog(@"%@",array[i]);
// }
for(id obj in array)
{
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld is %@",i,obj);
}

return 0;
}
void test ()
{
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

NSLog(@"%@",s6);
}

void test2()
{
[@"ptt\nptt" writeToFile:@"/Users/peitaotao/Desktop/总结.m" atomically:YES encoding:NSUTF8StringEncoding error:nil];


}
可变数组

//

#import <Foundation/Foundation.h>

#import "Person.h"

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

NSMutableArray *array = [NSMutableArray array];

[array addObject:[[Person alloc] init]];

[array addObject:@"ptt"];

NSLog(@"%ld",array.count);

return 0;
}

<pre name="code" class="html">#import <Foundation/Foundation.h>

@interface Person : NSObject

@end


 
<pre name="code" class="html">#import "Person.h"

@implementation Person

@end


 
<span style="white-space:pre"></span>计算代码行数的练习
<span style="white-space:pre"></span><pre name="code" class="html">//  Copyright (c) 2015年 裴涛涛. All rights reserved.///* *考察NSString、NSArray的使用 *NSFileManager */#import <Foundation/Foundation.h>NSUInteger codeLineCount(NSString *path)/* path:文件的全路径(可能是文件夹、也可能是文件) 返回值int:代码行数  */{    //1.获得文件管理者    NSFileManager *mgr = [NSFileManager defaultManager];    //2. 标记是否为文件夹    BOOL dir = NO;    //标记这个路径是否存在    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];    //如果不存在直接返回0    if(!exist)    {        NSLog(@"文件路径不存在");        return 0;        }        if (dir)    {       //  NSLog(@"是个文件夹");        //获得当前文件夹path下面的所有内容(文件、文件夹)                NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];                 int count = 0;        //遍历数组中的所有子文件(夹)名        for (NSString *filename in array)        {            //获得子文件(夹)的全路径            NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,filename];                      //NSLog(@"%@",fullPath);                       count += codeLineCount(fullPath);        }        return count;                 //              //  NSLog(@"%@",array);    }        else    {       // NSLog(@"是个文件");        //判断文件的拓展名(忽略大小写)                NSString *extension = [[path pathExtension] lowercaseString];        if( ![extension isEqualToString:@"h"]           && ![extension isEqualToString:@"m"]           && ![extension isEqualToString:@"c"])        {            return 0;        }        //加载文件内容        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];              //  NSLog(@"%@",content);        //将文件内容分割为每一行                NSArray *array = [content componentsSeparatedByString:@"\n" ];        //打印文件路径和行数                NSLog(@"%@----%d",path,array.count);                return array.count;    }     /*    int i = 0;        for (NSString *line in array)    {        NSLog(@"%d++++++%@",i,line);        i++;    }    */}int main(int argc, const char * argv[]) {       int count = codeLineCount(@"/Users/peitaotao/Desktop");          NSLog(@"%d",count);    return 0;}