24

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

在这篇 StOv 帖子中,似乎确实有迹象表明我的特定问题有一个很好的解决方案。

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

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:会这样做:

返回通过从给定字符集中包含的接收者字符的两端删除而生成的新字符串。

我仍然很想知道是否有人有其他/首选的方法来做到这一点。

4

3 回答 3

51

您正在使用 whitespaceAndNewlineCharacterSet,很好。但是不使用scanUpToCharactersFromSet,为什么不使用stringByTrimmingCharactersInSet?像这样的东西...

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

编辑:直到我发布此内容后,才意识到您已经找到了 stringByTrimmingCharactersInSet。

于 2009-01-23T20:22:18.183 回答
13

你正在寻找的是

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

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

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

于 2010-09-30T20:04:13.380 回答
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
于 2015-05-29T18:39:20.487 回答