zoukankan      html  css  js  c++  java
  • NSString用法,object-C数组以及字符串拼接和分割

    一、介绍
    使用NSString创建一个字符串的代码如下:


    #import <Foundation/Foundation.h>
    int main (int argc, char *argv[])
    {
        NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];


        NSString *str=@"Programming is fun";
        NSLog(@"%@",str);


        [pool drain];
        return 0;
    }
    Objective-C的字符串是由char组成,NSString的字符串是由unichar组成,unichar的字节数是可变的。
    默认创建的字符串是NSConstantString类的常量字符串。


    二、常用的方法
    #import <Foundation/Foundation.h>
    int main (int argc, char *argv[])
    {
        NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];


        //字符串声明、赋值、转换
        NSString *str1=@"This is string A";
        NSString *str2=@"This is string B";
        NSString *res;
        res=[NSString stringWithString:str1];
        NSLog(@"with:%@",res);
        res=[str1 stringByAppendingString:str2];
        NSLog(@"appending:%@",res);
        NSLog(@"Lowercase of str2:%@",[str2 lowercaseString]);
        NSLog(@"Uppercase of str2:%@",[str2 uppercaseString]);


        //字符串截取
        NSLog(@"Length of str1 is:%lu",[str1 length]);
        NSLog(@"First 3 chars of str1:%@",[str1 substringToIndex:3]);
        NSLog(@"Chars from index 5 of str1:%@",[str1 substringFromIndex:5]);
        NSLog(@"Chars from index 8 through 13:%@",[[str1 substringFromIndex:8]substringToIndex:6]);
        NSLog(@"Chars from index 8 through 13:%@",[str1 substringWithRange:NSMakeRange(8,6)]);


        //字符串比较
        if ([str1 isEqualToString:str2]) {
            NSLog(@"str1==str2");
        } else {
            NSLog(@"str1!=str2");
        }
        NSComparisonResult compareResult;
        compareResult=[str1 compare:str2];
        if (compareResult==NSOrderedAscending) {
            NSLog(@"str1<str2");
        } else if(compareResult==NSOrderedSame) {
            NSLog(@"str1=str2");
        } else {
            NSLog(@"str1>str2");
        }


        //字符串查找
        NSRange subRange;
        subRange=[str1 rangeOfString:@"string A"];
        NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);
        subRange=[str1 rangeOfString:@"string B"];
        if (subRange.location==NSNotFound) {
            NSLog(@"String not found");
        } else {
            NSLog(@"String is at index %lu,length is %lu",subRange.location,subRange.length);
        }


        [pool drain];
        return 0;
    }

    stringWithString通过从给定的字符串对象中复制字符串,来创建并返回一个字符串对象。语法是"+ (id)stringWithString:(NSString *)aString"。

    stringByAppendingString在接受字符串追加给定的字符串,并返回追加后的新字符串。语法是:"- (NSString *)stringByAppendingString:(NSString *)aString"。

    lowercaseString返回字符串的小写,语法是"- (NSString *)lowercaseString"。

    uppercaseString返回字符串的大写,语法是"- (NSString *)uppercaseString"。

    length返回Unicode字符数。语法是"- (NSUInteger)length",NSUInteger表示一个无符号的整形数。

    substringToIndex返回一个字符,它从首字符(首字符的索引是0)直到指定的索引字符(不包括指定的索引字符),并返回截取出来的新字符串。语法是"- (NSString *)substringToIndex:(NSUInteger)anIndex"。

    substringFromIndex返回一个子字符串,它从指定的索引的字符开始(包括指定的索引字符),直到字符串的结尾。语法是"- (NSString *)substringFromIndex:(NSUInteger)anIndex"。

    substringWithRange返回指定范围的子字符串。语法是"- (NSString *)substringWithRange:(NSRange)aRange"。 索引范围依靠NSRange对象来指定。

    isEqualToString判断两字符串是否相等,并返回一个布尔值,语法是"- (BOOL)isEqualToString:(NSString *)aString"。

    compare返回一个比较结果的对象,语法是:"- (NSComparisonResult)compare:(NSString *)aString"。NSComparisonResult有三种情况,表示给定的数字是否大于(NSOrderedAscending),等于(NSOrderedSame)或小于(NSOrderedDescending)接收器的值。compare方法区分大小写,而caseInsensitiveCompare方法不区分大小写。

    rangeOfString在接受字符串中查找指定字符串,如果有则返回第一次出现的范围。这个范围是用一个结构变量来表示的,结构成员location的值表示起始的索引,结构成员length表示子字符串的长度。如果没有则返回范围的location值为NSNotFound。

    Obj-C只是增加了一点“特殊语料”的C语言,所以可以用printf()代替NSLog()。但我们建议使用NSLog,因为它添加了特性,例如时间戳,日期戳和自动附加换行符(‘ ’)等。

    1.OC的数组成员是任意的对象指针    与C中的链表结构类似(以nil结尾)    一切的数组操作不能越界
    OC的数组分为不可变数组 NSArray    可变数组 NSMutableArray



    NSArray

    NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil]; 
    //通过下标获取数组成员(下标从0开始) 
    NSLog(@"%@",[array objectAtIndex:0]);


    //获取数组有效成员个数 (不包括nil) 
    NSLog(@"%ld",[array count]);
        
    for (i = 0; i < [array count]; i++) {
        //遍历数组(C方法) 
        NSLog(@"%@",[array objectAtIndex:i]); 
    }


    //(OC)查看数组内容(先给array发送description消息,然后给每个成员都发送一个description消息)
    NSLog(@"%@",array);


    //创建数组对象 相当于拷贝 
    NSArray * array1 = [[NSArray alloc]initWithArray:array];


    //创建数组对象 相当于拷贝 
    NSArray * arry2 = [NSArray arrayWithArray:array];


    //正序枚举器 
    //创建一个枚举器 把数组的每个元素的地址一次赋给枚举器,然后建立起某种关联 (枚举器只能用来读数组成员) 
    //枚举时 会和数组创建某种关联(修改监视器/迭代器) 限制枚举的同时不能修改元素 只能读不能写 
    NSEnumerator * enumer = [array objectEnumerator];


    id obj; 
    //第一次循环把数组的第一个元素赋给obj  第二次循环把第二个数组元素赋给obj 
    while (obj = [enumer nextObject]) {             
        //遍历数组 
        NSLog(@"%@",obj);     
    }
     
    //快速枚举  第一次循环把array的第一个元素赋给ob  第二次循环把array的第二个元素赋给ob 直到nil(只能读不能改) 
    for(id ob in array){ 
        NSLog(@"%@",ob);       
    }


     
    //逆序输出数组(创建逆序枚举器  第一次循环把最后一个元素赋给obj ) 
    NSEnumerator * enumer1 = [array reverseObjectEnumerator]; 
    while (obj = [enumer1 nextObject]) { 
         NSLog(@"%@",obj); 

        
    if ([obj isKindOfClass:[Dog class]]) 
    //获取类的类型 判是否是指定类的对象 
        if ([obj isMemberOfClass:[Dog class]]) { 



    2.不可变数组

    ----------------------------字符串查找----------------------------
    NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"one", nil];    
    NSUInteger index = [array indexOfObject:@"one123"];
    //返回第一个找到的数组成员对应的下标 找不到返回NSNotFound    
    index = [array indexOfObject:@"one" inRange:NSMakeRange(1, 3)];
    //在指定范围内查找 
    if (index != NSNotFound) { 
        NSLog(@"%ld",index); 



    ----------------------------抽取 组成新的数组----------------------------
    NSArray * array1 = [array objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]]; 
    《数字集合》 
    NSIndexSet这是个数字集合类 
    [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]产生一个数字集合


    3.可变数

    NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
    //在数组尾部插入元素  
    [array addObject:@"five"];


    //在数组指定下标位置插入元素(不能越界,最大值为length)    
    [array insertObject:@"six" atIndex:5];


    //删除指定元素(数组中出现的所有位置都将被删除) 
    [array removeObject:@"six"];


    //从指定下标位置开始的指定长度内删除指定元素 
    [array removeObject:@"two" inRange:NSMakeRange(0, 3)];


    //删除最后一个元素 
    [array removeLastObject];


    //删除所有元素     
    [array removeAllObjects];


    //将指定下标位置元素替换为指定的元素 
    [array replaceObjectAtIndex:3 withObject:@"ios"];


    //将指定下标的两个元素进行交换
    [array exchangeObjectAtIndex:0 withObjectAtIndex:3];


    4.字符串分割与拼接


    //@""   空的字符串对象
     
    ---------------------字符串分割实例---------------------
    NSString * ptr = @"I am a man"; 


    //将字符串整体作为分割条件 返回值为NSArray不可变数组 
    NSArray * array = [ptr componentsSeparatedByString:@" "];


    //若修改,则将NSArray转化为NSMutableArray 
    NSMutableArray * array1 = [NSMutableArray arrayWithArray:array];


    //以字符串中的字符作为分割条件进行分割
    NSArray * array2 = [ptr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];
     
    《字符集合》 
    NSCharacterSet 这是个字符集合类 


    //把字符串转化为字符集合
    [NSCharacterSet characterSetWithCharactersInString:@", "] 


    ---------------------字符串拼接实例---------------------
    NSString * str = [array componentsJoinedByString:@" "];   
    若分割条件出现在开头或者结尾,则会出现空串@"",如果不需要,则需要转化成NSMutableString对空串进行处理 
    func1:  [array1 removeObject:@""];     
    //找到空串直接删除 
    func2:  for(id obj in array1){
        if([obj length] == 0)           
        //空串的长度为0 
        if([obj isEqualToString:@""])   
        //与空串进行比较(字符串是不能进行==比较的,要使用函数)        

  • 相关阅读:
    CentOS 6的服务器后执行yum后发现出现Error: Cannot find a valid baseurl for repo: base解决办法
    C# 8字节byte数组转int
    Unity Packages 介绍
    开发笔记:服务端返回三/多级菜单数据的几种不同实现
    Grafana Azure Data Explorer Plug-In 中国区 ADX 支持
    Redash 连接中国区 Azure Data Explorer
    爆竹声中贺新年-- KEDA(Kubernetes Event-driven Autoscaling) 带你烟火秀
    生产随机码包含数字+字母
    关于串口通信发送组合键方法
    python 正则匹配一串字符串的负数和正数,合并两个列表为字典
  • 原文地址:https://www.cnblogs.com/W-Kr/p/5095198.html
Copyright © 2011-2022 走看看