iOS 通讯录空格

Posted 上官元空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 通讯录空格相关的知识,希望对你有一定的参考价值。

iOS 通讯录联系人出现 ASCII 码值为 160 的空格 

NOTE:

      这里的"空格"是指 在通讯录中取出的联系人中带有特殊空格

      带有特殊空格的字符串 "测试8:182 1075 3001,测试4:182 1075 3001,测试1:180 1588 1111,测试9:182 1075 3001,测试5:182 1075 3001,测试2:176 1214 1111,测试10:182 1075 3001,测试6:182 1075 3001,测试11:182 1075 3001,测试7:182 1075 3001,测试3:182 1075 3001"

 

网上关于空格的解决方案(并没有什么卵用):

1. ios 自带去除空格方法  

NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];  

2. 字符串替换

NSString *strUrl = [urlString stringByReplacingOccurrencesOfString:@" " withString:@""];

3.直接把字符串转换成整形 (也不行)

["182 1075 3001" intValue] 

这个方法 结果是  "182"

4.在字符串中提取数字 (方法听着可以,但是还是不行。翔太多)

  第一种方法

    NSScanner *scanner = [NSScanner scannerWithString:"182 1075 3001"];

    [scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil];

    int number;

    [scanner scanInt:&number];    

    NSString *num=[NSString stringWithFormat:@"%d",number];

第二种方法    

    NSCharacterSet* nonDigits =[[NSCharacterSet decimalDigitCharacterSet] invertedSet];

    int remainSecond =[[urlString stringByTrimmingCharactersInSet:nonDigits] intValue];

    NSLog(@" num %d ",remainSecond);

结果是 182

 

************************************以上是网络的方法************************************************************

 

解决方案:

1. 把字符串转换成字符数组 

2. 把160 的 ascii 剔除

3. 把剩余的 ascii 转换成字符串

           NSString *personPhone = @"182 1075 3001,182 1075 3001,182 1075 3001,182 1075 3001";

 

           NSMutableArray *nonBreakingSpaceArr = [NSMutableArray arrayWithCapacity:0];

            //  把字符串转换成字符数组 

            for (int i = 0; i < personPhone.length; i++) {

                [nonBreakingSpaceArr addObject:[NSNumber numberWithInteger:[personPhone characterAtIndex:i]]];

            }

            // 这个 160 是一个特殊的空格 ascii 编码

            if ([nonBreakingSpaceArr containsObject:[NSNumber numberWithInteger:160]]) {

                NSMutableString *tempStr = [NSMutableString stringWithCapacity:0];

                [nonBreakingSpaceArr enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL * _Nonnull stop) {

                    if (160 != [obj intValue]) {

                       //  把剩余的 ascii 转换成字符串

                        [tempStr appendString:[NSString stringWithFormat:@"%c",[obj intValue]]];

                    }

                }];

                personPhone = tempStr;

            }

            

 

以上是关于iOS 通讯录空格的主要内容,如果未能解决你的问题,请参考以下文章

ios 替换字符串

iOS学习笔记29-系统服务通讯录

IOS-通讯录

iOS调用系统通讯录(适配iOS9iOS10)(转载)

iOS 通讯录基础

iOS:通讯录