iOS开发·NSString字符串的各种基本操作,数值转换及衍生操作

  • 目前,有不少文献介绍字符串的一些基本操作,如:字符串插入、字符串覆盖、字符串截取、分割字符串。

但有时候,仅仅停留在这些基本操作还不能直接满足一些需求,这时候可以利用这些基本操作进行一些字符串的衍生操作。

这篇文章,将先引用CSDN一个大神的字符串【基本操作】,基于此,然后介绍一些【字符串的衍生操作】。

一. 字符串的基本操作

1.【字符串插入】

    NSMutableString* str1=[[NSMutableString alloc] initWithString:@"hello"];//存在堆区,可变字符串
    NSLog(@"str1:%@",str1);
    [str1 insertString:@"234"atIndex:2];//把一个字符串插入另一个字符串中的某一个位置
    NSLog(@"str1:%@",str1);

2.【字符串覆盖】

    NSRange range={1,2};//字符串覆盖另一个字符串(覆盖范围可以设定)
    [str1 replaceCharactersInRange:range withString:@"dffdf"];
    NSLog(@"str1:%@",str1);

3.【字符串截取】


    NSMutableString* str4=[[NSMutableString alloc] initWithString:@"handaiy"];
    NSString* str5=[str4 substringFromIndex:5];//截取从第5位到最后一位
    NSLog(@"截取后的字符串为:%@",str5);
    
    NSMutableString* str6=[[NSMutableString alloc] initWithString:@"handaiy"];
    NSString* str7=[str6 substringToIndex:5];//截取从0位到第4位
    NSLog(@"截取后的字符串为:%@",str7);
    
    NSMutableString* str8=[[NSMutableString alloc] initWithString:@"handaiy"];
    NSRange ange={2,3};
    NSString* str9=[str8 substringWithRange:ange];//截取从第二位到第4位
    NSLog(@"截取后的字符串为:%@",str9);

4.【字符串的大小转换】

    /*
     (1)将所有的字符串内容变为大写字母  uppercaseString
     (2)将所有的字符串内容变为小写字母  lowercaseString
     (3)将单词的首字母小写变为大写字母  capitalizedString
     */
    NSString* str10=@"sayhelloworld";
    NSString* str11=[str10 uppercaseString];
    NSLog(@"str11:%@",str11);//(1)将所有的字符串内容变为大写字母
    
    NSString* str12=@"Hello WORD";
    NSString* str13=[str12 lowercaseString];
    NSLog(@"str11:%@",str13);//(2)将所有的字符串内容变为小写字母
    
    
    NSString* stu=@"sayhelloworld";
    NSString* aa=[stu substringToIndex:3];//截取say
    NSString* stu1=[aa capitalizedString];//把say首字母变成大写
    NSRange rang={3,5};//截取hello
    NSString* bb=[stu substringWithRange:rang];//取出hello创建对象bb
    NSString* stu2=[bb capitalizedString];//把hello首字母变成大写
    NSString* dd=[stu substringFromIndex:8];
    NSString* stu3=[dd capitalizedString];
    //拼接方法(1)
    NSString* stu4=[NSString stringWithFormat:@"%@%@%@",stu1,stu2,stu3];//把截取出来的单词拼接成新的字符串。
    NSLog(@"截取单词后,每个单词首字母变成大写,然后重新拼接成的新字符串:%@",stu4);//(4)字符串截取、改变、拼接
    //拼接方法(2)如:
    NSString* h=@"2014年";
    NSString* j=@"9月";
    NSString* k=@"26号";
    NSString* riqi=[[[[h stringByAppendingString:@"_"]
                      stringByAppendingString:j]
                     stringByAppendingString:@"_"]
                    stringByAppendingString:k];
    NSLog(@"%@",riqi);
    
    ```
    
5.【分割字符串】
NSString* nba=@"2014.9.26";
NSArray *p=[nba componentsSeparatedByString:@"."];
NSLog(@"分割后的字符串:%@",p);
```

6.【字符串转化为数字型再计算】intValue、floatVale...

    NSString* cba=@"2014";
    int s=[cba intValue];
    int d=s+1;
    NSLog(@"字符串转化成数字后再计算:%d",d);

7.【数字型转化为字符串】

    int z=45534;
    NSString* g=[NSString stringWithFormat:@"%d",z];
    NSLog(@"数字转化为字符串:%@",g);

8.字符串的【末尾追加】新的字符串

    NSString *bbc =@"www.cn";
    NSString *bbc1 = [bbc stringByAppendingString:@"itcast.cn"];
    NSLog(@"bbc1: %@",bbc1);

9.在【制定的范围追加】字符串(插入字符串、替换字符串)

    NSString *aac =@"wwwbbbccc";
    NSRange ranges = {4,0};
    NSString *aac1 = [aac stringByReplacingCharactersInRange:ranges withString:@"aa"];
    NSLog(@"aac1: %@",aac1);

10.使用新的字符串【替换】原有的字符串或删除指定的字符串

    NSString *cca =@"ww w.bai.com";
    NSString *cca1 = [cca stringByReplacingOccurrencesOfString:@"bai"withString:@"du"];//替换
    NSString *cca2 = [cca stringByReplacingOccurrencesOfString:@"co"withString:@""];//删除
    NSString *cca3 = [ccastringByReplacingOccurrencesOfString:@" "withString:@""];//删除空格号
    NSLog(@"cca1: %@ cca2: %@ cca3: %@",cca1,cca2,cca3);
  

11.【带引号】的字符串

    NSString *string = @"hello, \"world\"";
    NSLog(@"带引号的字符串:%@",string);
    
    NSString *string2 = [NSString stringWithFormat:@"hello,\"%@\"",@"世界"];
    NSLog(@"拼接字符串:%@",string2);
  • 上面输出效果:
2017-06-10 11:37:07.535423 test123[1588:130648] 带引号的字符串:hello, "world"
2017-06-10 11:37:07.535488 test123[1588:130648] 拼接字符串:hello,"世界"
Program ended with exit code: 0

二. 字符串(NSString)与数值(int,NSInteger)的基本转换

假设有

NSString *tempA = @"123";
NSString *tempB = @"456";
1. 字符串拼接
NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB];
2. 字符转NSInteger
NSInteger k = [newString integerValue];
3. NSInteger转字符
NSString *s = [NSString stringWithFormat:@"%ld",k];
4. 字符转int
int intString = [newString intValue];
5. int转字符
NSString *stringInt = [NSString stringWithFormat:@"%d",intString];
6. 字符转float
float floatString = [newString floatValue];
7. float转字符
NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];

三. 字符串的衍生操作

1.首字母替换为星号*(脱敏处理)
  • 需求:

脱敏处理,比如隐藏某个字符串的首字符为*号。

  • 功能拆解:

先【截取】指定字符串首字符,作为占位字符串【替换】为指定字符串。

  • 代码
NSString *testStr = @"我的名字很敏感";
NSString *tempStr = [testStr substringToIndex:1];
_headerView.nickNameLabel.text = [testStr stringByReplacingOccurrencesOfString:tempStr withString:@"*"];
2.检查中文字符
  • 需求

检查字符串中是否有中文

  • 代码
#pragma mark - 检查中文输入
- (BOOL)validateChinese
{
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{2,8}$";
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
    return [passWordPredicate evaluateWithObject:self];
}
3.字符串过滤emoji表情符
  • 需求

用户输入了一个文本,当需要先出该文本字符串过滤emoji表情符才能进行下一步操作时,如作为网络请求参数。一些后台的数据库不支持emoji的处理。

  • 代码
#pragma mark - @return 没有表情符号的字符串.
- (NSString *)emojizedStringByReplacingOccurrencesOfString:(NSString *)text
{
    if (self.length == 0) {
        return text;
    }
    
    __block NSString *resultStr = @"";
    
    [self enumerateSubstringsInRange:NSMakeRange(0,
                                                 [self length])
                             options:NSStringEnumerationByComposedCharacterSequences
                          usingBlock:^(NSString *substring,
                                       NSRange substringRange,
                                       NSRange enclosingRange,
                                       BOOL *stop)
     {
         //         NSLog(@"substring: %@", substring);
         BOOL containsEmoji = NO;
         NSString *contains = substring;
         
         const unichar hs = [substring characterAtIndex:0];
         // surrogate pair
         if (0xd800 <= hs &&
             hs <= 0xdbff)
         {
             if (substring.length > 1)
             {
                 const unichar ls = [substring characterAtIndex:1];
                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                 if (0x1d000 <= uc &&
                     uc <= 0x1f9c0)
                 {
                     containsEmoji = YES;
                     contains = text;
                 }
             }
         }
         else if (substring.length > 1)
         {
             const unichar ls = [substring characterAtIndex:1];
             if (ls == 0x20e3 ||
                 ls == 0xfe0f ||
                 ls == 0xd83c)
             {
                 containsEmoji = YES;
                 contains = text;
             }
         }
         else
         {
             // non surrogate
             if (0x2100 <= hs &&
                 hs <= 0x27ff)
             {
                 containsEmoji = YES;
                 contains = text;
             }
             else if (0x2B05 <= hs &&
                      hs <= 0x2b07)
             {
                 containsEmoji = YES;
                 contains = text;
             }
             else if (0x2934 <= hs &&
                      hs <= 0x2935)
             {
                 containsEmoji = YES;
                 contains = text;
             }
             else if (0x3297 <= hs &&
                      hs <= 0x3299)
             {
                 containsEmoji = YES;
                 contains = text;
             }
             else if (hs == 0xa9 ||
                      hs == 0xae ||
                      hs == 0x303d ||
                      hs == 0x3030 ||
                      hs == 0x2b55 ||
                      hs == 0x2b1c ||
                      hs == 0x2b1b ||
                      hs == 0x2b50)
             {
                 containsEmoji = YES;
                 contains = text;
             }
         }
         resultStr = [NSString stringWithFormat:@"%@%@", resultStr, contains];
         
     }];
    
    return resultStr;
}

【后续待更新..】

参考文献

http://blog.csdn.net/sevenquan
http://www.cnblogs.com/Zsmile/p/4140371.html

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

推荐阅读更多精彩内容