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

------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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值