收集iOS-- NSString 字符串的使用

判断字符串是否含有中文

+ (BOOL)checkIsChinese:(NSString *)string
{
    for (int i=0; i<string.length; i++)
    {
        unichar ch = [string characterAtIndex:i];
        if (0x4E00 <= ch  && ch <= 0x9FA5)
        {
            return YES;
        }
    }
    return NO;
}

计算字符串长度
方法一

- (int)convertToInt:(NSString*)strtemp
{
    int strlength = 0;
    char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
    for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++)
    {
        if (*p)
        {
            p++;
            strlength++;
        }
        else
        {
            p++;
        }

    }
    return strlength;
}

方法二

-(NSUInteger) unicodeLengthOfString: (NSString *) text
{
    NSUInteger asciiLength = 0;
    for (NSUInteger i = 0; i < text.length; i++)
    {
        unichar uc = [text characterAtIndex: i];
        asciiLength += isascii(uc) ? 1 : 2;
    }
    return asciiLength;
}

iOS 获取汉字的拼音

+ (NSString *)transform:(NSString *)chinese
{    
    //将NSString装换成NSMutableString 
    NSMutableString *pinyin = [chinese mutableCopy];    
    //将汉字转换为拼音(带音标)    
    CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformMandarinLatin, NO);    
    NSLog(@"%@", pinyin);    
    //去掉拼音的音标    
    CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformStripCombiningMarks, NO);    
    NSLog(@"%@", pinyin);    
    //返回最近结果    
    return pinyin;
 }

1. 不可变字符串 NSStirng

用copy 的原因: 外界修改了字符串 不会影响里面。
@property(nonatomic ,copy) NSString * name ;

字符串反转

第一种:

- (NSString *)reverseWordsInString:(NSString *)str
{    
    NSMutableString *newString = [[NSMutableString alloc] initWithCapacity:str.length];
    for (NSInteger i = str.length - 1; i >= 0 ; i --)
    {
        unichar ch = [str characterAtIndex:i];       
        [newString appendFormat:@"%c", ch];    
    }    
     return newString;
}

//第二种:

- (NSString*)reverseWordsInString:(NSString*)str
{    
     NSMutableString *reverString = [NSMutableString stringWithCapacity:str.length];    
     [str enumerateSubstringsInRange:NSMakeRange(0, str.length) options:NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences  usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
          [reverString appendString:substring];                         
      }];    
     return reverString;
}

%@ 是输出OC字符串用的 C的字符串用%s
在OC 中 @符号代表对象的意思 也可以代表一个指针
不需要自己释放内存(系统帮我们释放内存)
NSString *str = @"Hello";

需要自己释放内存。

NSString *str =[[NSString alloc]init];
str =@"ios";
NSString *str =[[NSString alloc]initWithFormat:@“%d” %f %s ,10,10.1,”~~~”];

NSString *str =[[NSString stringWithString:str1];

格式化字符串

int a =10;
int b = 20;
NSString *str = [NSString stringWithFormat:@"@a= %d b=%d",a,b];

拼接字符串

NSString *str =[str1 stringByAppendingString :str2];

转化大小写

NSString *str1 =@"aJSHDdssFKJH";
NSString *str2 =[str1 lowercaseString]; //转换小写
NSString *str3 =[str1 uppercaseString]; //转换大写

判断有没有 前缀,后缀

NSString *str =@"www.baidu.com";
BOOL hasPreFix =[str hasPreFix:@"www"];//判断前缀
BOOL hasSuffix =[str hasSuffix:@"com"];//判断前缀

判断两个字符串是否相同

if ([str1 isEqualToString str2])

分割字符串

NSString *str =@"www.baidu.com";
NSArray *arrays =[str componentsSeparatedByString:@"."];
for(NSString *str in strArray)
{
    NSLog(@"str =%@",str);
}

将字符串拆分为每一个字符

for(int i=0; i<[str length];i++)
{
    NSLog(@"%c",[str characterAtIndex:i]);
}

//查找

NSString *str =@"ad df grdg awe sd ";
//查找指定字符串的位置
NSRange range1 = [str rangeOfString:@"ad"];
NSLog(@"range1.location:@ld  range1.length:%ld",range1.location
      ,range1.length);

替换

NSString *str =@"ad df grdg awe sd ";
//从第0位置开始 ,替换2个字符  替换为 你好
NSString *str2 =[str stringByReplacingCharactersInRange:NSMakeRange(0,2)withString:@"你好"];

读取文件:1.网络文件 2.本地文件

NSString *str =@"www.baidu.com"
//网络路径:
NSURL *httpURL = [NSURL URLWithString:str];
//本地路径
NSURL *fileURL = [NSURL fileURLWithPath:str];

//读取网络文件
NSString *httpStr =[NSString stringWithContentsOfURL:httpURL encoding:NSUTF8StringEncoding error:nil];
//读取本地文件
NSString *fileStr =[NSString  stringWithContentsOfFile:@"/Users/Visitor/Desktop/text.txt"encoding:NSUTF8StringEncoding error:nil];

//写入文件
NSString *str =@"hello world";
BOOL isOK = [str writeToFile:@"/Users/Visitor/Desktop/demo.txt" atomically:YES encoding:NSUTF8StringEncoding error :nil];

2. 可变字符串 NSMutableString

可变字符串是字符串的子类

NSMutableString *str = [[NSMutableString alloc] initWithCapicity:10];
//不能用 str = @"hello"; 会被提示错误。
[str setString :@"hello"];

1.追加字符串(只有可变字符串才能用)

[str appendingString @" world"];
int a =10;
[str appendFormat:@" - %d",a];

2.替换字符串(只有可变字符串才能用)

NSRange range = [str rangeOfString:@"world"];
[str replaceCharactersInRange:range withString:@" 你好!"];

插入字符串

[str insertString :@"A " atIndex:6]; //在第6位中插入字符串

删除字符串

NSRange range = [str rangeOfString:@"world"];
[str deleteCharactersInRange:range];

知识点1:比较两个字符串大小

正确方法 isEqualToString (区分大小写,返回YES NO) 比较接收方和当作参数传递来的字符串

    if(str1  isEqualToString str2 )
        {   
            NSLog(@“相等”);
            }else{
            NSLog(@“不相等”);
        }       

   compare  方法返回的结果有三种:
   str1 < str2     NSOrderedAscending  升序   123456     1
   str1 > str2  NSOrderedDescending  降序  654321    -1
   str1 == str2   NSOrderedSame  0

NSLiteralSearch 进行完全比较 区分大小写 (默认)
NSCaseInsensitiveSearch  不区分大小写
NSNumericSearch  字符个数
扩展:
 ( 比较原则: 取出每个字符的ASCII码值比较ASCII 码值大小)  
实例程序:NSString *str1 = @“abc”; //97
        NSString *str2 = @“bcd”; // 98
        //知识点: 如果不是一个类  后面不用加 * 号
        NSComparisonResult result =[ str1 compare:str2  options:NSCaseInsensitiveSearch];   
        //判断
        switch (result)
            case NSOrderedAscending:
              NSLog(@“str1>str2 升序”);
              break;
            case NSOrderedDescending:
              NSLog(@“str1>str2 降序”);
              break;
            case NSOrderedSame:
              NSLog(@“相同”);
              break;
           default;  
实例程序: 
        NSString *str1 = @“abc” //存放地址  常量区
        NSString *str3 = [NSString stringWithFormat :@“abc”]; // 存放地址  堆区
        //地址的比较
        //  “==”不能判断字符串是否相等   比的是地址  地址一样就相等,不管内容
        if(str1 ==str3){   //错误方法
            NSLog(@“相等”);
            }else{
            NSLog(@“不相等”);
        }       

知识点2:NSString 的前缀,后缀 检查和搜索

// [str hasPrefix:@“要检测的内容” ];     [str hasSuffix:@“要检测的内容”]

//如何检测这个字符串是否是一个网址
//检测一个字符串的前缀是否是以:            http://   或者    https:// 开头

   实例程序: 
   NSString *url = @“http://www.baidu.com”;
   if([url hasPrefix:@“http://”] | | [url hasPrefix:@“https://”]){
     NSLog(@“是一个网址”);
    }else{   NSLog(@“不是一个网址”);
}

知识点3: 字符串的查找

//查找某个字符串在另一个字符串中首次出现的位置   1   rangOfString   2
//range 结构体变量   NSRange 结构体别名
//range.location  表示字符串首次出现的位置
//range.length 字符串出现的长度 (实质上就是子字符串的长度)
   实例程序: 
            NSString *str1 = @“abcdefgh”;
            NSString *str2 = @“cd”;
            NSRange range = [str1 rangeOfString : str2 ];
            NSLog(@“%lu,%lu”,length.location,range.length);  
            //如果查找到了  返回 结果  2   2 
            //如果查找不到 ,  返回的信息 location 返回特别大的数(NSNotFound)  最大的long 整形的数, length 返回 0 

知识点4: 字符串的截取

                         012345
NSString *str1 = @“abcdefgh”
//从某一位开始截取后面的字符串
NSString *str =[str1 substringFromIndex:2]; //从第二位开始截取字符串、【包含第二位】cdefgh
//从开头截取到某一位
NSString *str =[str1 substringToIndex:5];//从开头截取到第5位 [ 不包含 第五位]  abcde
//截取一个范围 range
NSRange range ={3,4};
NSString *str = [str1 substringWithRange:range];  结果:defg



        for(MIOOrderInfo *order in self.subs)
        {
            //商品id
            NSString *pid = order.pid;
            //男.女 鞋
            NSString *poid =order.poid;
            //鞋码42
            NSString *pvid =order.pvid;
            //购买数量
            NSString *pquantity = order.pquantity;
            
            NSString *orderInfo =[NSString stringWithFormat:@"%@:%@:%@:%@",pid,poid,pvid,pquantity];
            NSLog(@"%@",orderInfo);
            
            str = [str stringByAppendingFormat:@";%@",orderInfo];
            
        }
        
        
        NSString *order_info =[str substringFromIndex:1];
        NSLog(@"str = %@",order_info);

3.分隔字符串

NSString*string =@"sdfsfsfsAdfsdf";

NSArray *array = [string componentsSeparatedByString:@"A"]; //从字符A中分隔成2个元素的数组
NSLog(@"array:%@",array); //结果是adfsfsfs和dfsdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容