从NSString中删除所有空格

mar*_*014 131 string cocoa objective-c nsstring

我一直试图摆脱一个白色的空间NSString,但我尝试过的方法都没有.

我有"this is a test",我想得到"thisisatest".

我用过whitespaceCharacterSet,应该消除白色空间.

NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

但是我一直用空格来获得相同的字符串.有任何想法吗?

Ali*_*are 298

stringByTrimmingCharactersInSet 只删除字符串开头和结尾的字符,而不是中间的字符.

1)如果您只需要从字符串中删除给定字符(例如空格字符),请使用:

[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]
Run Code Online (Sandbox Code Playgroud)

2)如果你真的需要删除一组字符(不仅是空格字符,而且还有任何空白字符,如空格,制表符,不可破坏的空格等),你可以使用whitespaceCharacterSet然后在一个字符串中再次连接单词来拆分字符串:

NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)

请注意,最后一个解决方案的优点是处理每个空白字符而不仅仅是空格,但效率要低一些stringByReplacingOccurrencesOfString:withString:.因此,如果您真的只需要删除空格字符并确保您没有任何其他空格字符而不是普通空格字符,请使用第一种方法.


n8t*_*8tr 31

我更喜欢使用这样的正则表达式:

NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                          range:NSMakeRange(0, [myStringlength])];
 //myNewString will be @"thisisatest"
Run Code Online (Sandbox Code Playgroud)

你可以让自己成为NSString的一个类别,让生活更轻松:

- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];
Run Code Online (Sandbox Code Playgroud)

}

这也是一个单元测试方法:

- (void) testRemoveAllWhitespace
{
    NSString *testResult = nil;

    NSArray *testStringsArray        = @[@""
                                         ,@"    "
                                         ,@"  basicTest    "
                                         ,@"  another Test \n"
                                         ,@"a b c d e f g"
                                         ,@"\n\tA\t\t \t \nB    \f  C \t  ,d,\ve   F\r\r\r"
                                         ,@"  landscape, portrait,     ,,,up_side-down   ;asdf;  lkjfasdf0qi4jr0213 ua;;;;af!@@##$$ %^^ & *  * ()+  +   "
                                         ];

    NSArray *expectedResultsArray   = @[@""
                                        ,@""
                                        ,@"basicTest"
                                        ,@"anotherTest"
                                        ,@"abcdefg"
                                        ,@"ABC,d,eF"
                                        ,@"landscape,portrait,,,,up_side-down;asdf;lkjfasdf0qi4jr0213ua;;;;af!@@##$$%^^&**()++"
                                        ];

    for (int i=0; i < [testStringsArray count]; i++)
    {
        testResult = [testStringsArray[i] removeAllWhitespace];
        STAssertTrue([testResult isEqualToString:expectedResultsArray[i]], @"Expected: \"%@\" to become: \"%@\", but result was \"%@\"",
                     testStringsArray[i], expectedResultsArray[i], testResult);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,伙计,我喜欢这包括单元测试业务。现在,我不仅可以从 SO 复制粘贴我的代码,而且还可以复制粘贴该代码的测试! (2认同)

You*_*sef 11

轻松完成任务 stringByReplacingOccurrencesOfString

NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
Run Code Online (Sandbox Code Playgroud)


dvp*_*rov 5

这可能会帮助你,如果你正在经历\u00a0的代替 (whitespace). I had this problem when I was trying to extract Device Contact Phone Numbers. I needed to modify the phoneNumber string so it has no whitespace in it.

NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
Run Code Online (Sandbox Code Playgroud)

When yourString是当前电话号码.