去空格 whitespaceAndNewlineCharacterSet和过滤字符串

 一、过滤字符串

  可以使用stringByTrimmingCharactersInSet函数过滤字符串中的特殊符号

 

  首先自己定义一个NSCharacterSet, 包含需要去除的特殊符号

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_//|~<>$€^•'@#$%^&*()_+'/"""];



由于NSString中有全角符号和半角符号, 因此有些符号要包括全角和半角的



然后调用stringByTrimmingCharactersInSet



NSString *trimmedString = [string stringByTrimmingCharactersInSet:set];



trimmedString就是过滤后的字符串

二、去除空格

  1.去掉两端的空格

  1 [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]   

 

  2.去掉多余的空格

1 NSString *str = @"    this     is a    test    .   ";  
2       
3     NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet];  
4     NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];  
5       
6     NSArray *parts = [str componentsSeparatedByCharactersInSet:whitespaces];  
7     NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];  
8     str = [filteredArray componentsJoinedByString:@" "]; 

 

  3.去掉所有空格

 1 [str stringByReplacingOccurrencesOfString:@" " withString:@""]  

 

  4.去掉最左边的空格  和  去掉最右边的空格

@interface NSString (TrimmingAdditions)  
- (NSString *)stringByTrimmingLeftCharactersInSet:(NSCharacterSet *)characterSet ;  
- (NSString *)stringByTrimmingRightCharactersInSet:(NSCharacterSet *)characterSet ;  
@end  
  
@implementation NSString (TrimmingAdditions)  
  
- (NSString *)stringByTrimmingLeftCharactersInSet:(NSCharacterSet *)characterSet {  
    NSUInteger location = 0;  
    NSUInteger length = [self length];  
    unichar charBuffer[length];      
    [self getCharacters:charBuffer];  
  
    for (location; location < length; location++) {  
        if (![characterSet characterIsMember:charBuffer[location]]) {  
            break;  
        }  
    }  
  
    return [self substringWithRange:NSMakeRange(location, length - location)];  
}  
  
- (NSString *)stringByTrimmingRightCharactersInSet:(NSCharacterSet *)characterSet {  
    NSUInteger location = 0;  
    NSUInteger length = [self length];  
    unichar charBuffer[length];      
    [self getCharacters:charBuffer];  
  
    for (length; length > 0; length--) {  
        if (![characterSet characterIsMember:charBuffer[length - 1]]) {  
            break;  
        }  
    }  
  
    return [self substringWithRange:NSMakeRange(location, length - location)];  
}  
  
@end  

    例如:NSLog(@"%@",[@"abc 123 " stringByTrimmingRightCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]);

      :NSLog(@"%@",[@"0.012300" stringByTrimmingRightCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"0"]]);

 

 一个非常好的例子,来源于http://nshipster.com/nscharacterset/, 去掉多余的空格(包括两端的和中间的)

NSString *exampleStr = @" My name    is Johnny!";  
exampleStr = [exampleStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];  
NSArray *exampleArr = [exampleStr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];  
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self <> ''"];  
exampleArr = [exampleArr filteredArrayUsingPredicate:predicate];  
exampleStr = [exampleArr componentsJoinedByString:@" "];

 

posted @ 2016-12-18 11:24  超神船长  阅读(8813)  评论(0编辑  收藏  举报