在Cocoa Touch中从字符串中修剪空白的最佳方法是什么?

时间:2009-01-23 19:58:05

标签: objective-c string cocoa-touch whitespace

如果不是nil,我想确定来自用户输入(UITextField)的字符串值是否为“空白”。检查[textField.text isEqualToString:""]是否不够,因为我想避免任何空白/空白输入(比如说几个空格字符)。

对于我的特定问题in this StOv post似乎有一个很好的解决方案。

基本上它是这样的,但我怀疑必须(或者应该)是更好的方式:

NSString *strResult;
NSScanner* scanner = [NSScanner scannerWithString:textField.text];
BOOL hasValidChars = [scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] 
                                             intoString:&strResult];

// if hasValidChars == YES, we've got nonwhite space chars collected into strResult

这显然只适用于我的特定情况,即使这样,如果第一个字符是空格但是我想要的数据也会失败。所以,我意识到Ruby已经被一点点宠坏了,但是在Cocoa中必须有一个用来修剪字符串的尝试和真实的习惯用法。

Aaaand的答案已经存在,我的道歉:

NSString的-stringByTrimmingCharactersInSet:会这样做:

  

返回通过删除生成的新字符串   从接收器的两端   给定的字符   字符集。

我仍然很想知道是否有人有其他/首选的方式来做这件事。

3 个答案:

答案 0 :(得分:48)

你正在使用whitespaceAndNewlineCharacterSet,好。但是为什么不使用stringByTrimmingCharactersInSet而不是使用scanUpToCharactersFromSet?像这样......

strResult = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

编辑:在我发布之后才意识到你已经找到了stringByTrimmingCharactersInSet。

答案 1 :(得分:13)

您正在寻找的是

[string stringByReplacingOccurrencesOfString:@" " withString:@""]

删除字符串中间的空格不称为“修剪”。

根据定义进行修剪从边缘开始。

答案 2 :(得分:1)

为了让自己更容易,而不是创建子类,您可以修改现有的Apple类并执行类似

的操作
//
// NSString+MyExtensions.h
//

@interface NSString (MyExtensions)

- (NSString *)trimmed;

@end

和实施

//
// NSString+MyExtensions.m
//

#import "NSString+MyExtensions.h"

@implementation NSString (MyExtensions)

- (NSString *)trimmed {
     return [self stringByTrimmingCharactersInSet:
             [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

@end

现在您的应用中使用NSString的任何地方,您现在可以拨打[@" hello world " trimmed],如下所示

//
// ViewController.m
//

#import "NSString+MyExtensions.h"

@implementation ViewController

- (void)viewDidLoad {

    NSString *string = @"      This is a string    ";

    NSLog(@"The original string: %@ \n The trimmed string: %@\n\n",
          string,
          [string trimmed]);

    string = @"                 ";

    if([string trimmed].length == 0)
        NSLog(@"%@", @"String is empty! :O");

}

@end

哪个会打印出来

The original string:       This is a string    
The trimmed string: This is a string

String is empty! :O