objective c whitespaceandnewlinecharacterset 在Cocoa Touch中修改字符串空白的最好方法是什么?




whitespaceandnewlinecharacterset (3)

为了让自己更容易,而不是创建一个子类,可以修改现有的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

我正在寻找确定是否从用户输入(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中必须有一个可以修正字符串的成熟的习惯用法。

答案和答案已经在那里,我的道歉:

NSString的-stringByTrimmingCharactersInSet:会做到这一点:

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

我仍然好奇听到有没有人有这样的其他/首选的方式。


你在找什么

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

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

根据定义修剪从边缘工作。


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

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

编辑:没有意识到你已经发现stringByTrimmingCharactersInSet,直到我发布后。





whitespace