去空格 whitespaceAndNewlineCharacterSet和过滤字符串

本文介绍了Objective-C中处理字符串的方法,包括如何过滤特殊字符、去除空格等实用技巧,并提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、过滤字符串

  可以使用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:@" "];

 

转载于:https://www.cnblogs.com/mkai/p/6193972.html

在 Objective-C 中,判断 `NSString` 是否为空的最佳实践需要考虑多种情况,包括字符串是否为 `nil` 或者长度为零的情况。以下是几种常见且高效的方式: ### 1. 使用布尔方法 `-[NSString isEqualToString:]` 这是一种简单直观的方法,适用于大多数场景: ```objc BOOL isEmpty = [string isEqualToString:@""]; ``` 这里假设 `string` 不为 `nil`。如果存在可能性为 `nil` 的情况,则需额外处理[^4]。 --- ### 2. 结合 `nil` 检查与 `[NSString length]` 这是更为全面的一种方式,能够同时检测字符串是否为 `nil` 或其内容是否为空白字符: ```objc BOOL isEmpty = (!string || string.length == 0); ``` 这种逻辑利用了 C 风格的短路求值机制,先检查指针本身是否为 `nil`,再进一步调用实例方法获取长度[^1]。 --- ### 3. 剔除空白符后再做比较 有时字符串可能只包含空格或其他不可见字符(如制表符 `\t`),因此还需要清理这些无意义的内容之后再判定是否为空: ```objc NSString *trimmedString = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; BOOL isEmpty = !trimmedString || trimmedString.length == 0; ``` 这段代码通过去除首尾多余的空白换行来提高准确性[^2]。 --- ### 4. 自定义分类扩展简化操作 为了便于维护以及重复使用,可以创建一个专门用于此类验证功能的类别(Category),如下所示: ```objc @interface NSString (EmptyCheck) + (BOOL)isBlank:(NSString *)str; @end @implementation NSString (EmptyCheck) + (BOOL)isBlank:(NSString *)str { return ![str isKindOfClass:[NSString class]] || str.length == 0 || [[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0; } @end ``` 随后即可像这样简洁地调用了: ```objc if ([NSString isBlank:string]) { NSLog(@"The string is empty or contains only whitespaces."); } ``` --- 尽管现代 Swift 编程语言逐渐取代了部分传统领域中的地位,但正如之前提到过的那样,Objective-C 至今仍然具备重要价值[^3]。掌握好它的核心特性最佳实践对于从事苹果生态系统的工程师来说至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值