从NSString中删除所有空白空间

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我一直在努力摆脱NSString但我尝试过的方法都没有奏效。

我有"this is a test"我想让"thisisatest".

我用过whitespaceCharacterSet,这应该是为了消除空白。

NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];

但我一直用空格得到同样的字符串。有什么想法吗?

提问于
用户回答回答于

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

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

[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]

2)如果确实需要删除一组字符(即不仅是空格字符,还有任何空格字符,如空格、制表符、不可破空格等),则可以使用whitespaceCharacterSet然后再用一个字符串将单词加入:

NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];

请注意,最后一个解决方案的优点是处理每个空白字符,而不仅仅是空格,但与stringByReplacingOccurrencesOfString:withString:___。因此,如果您确实只需要删除空格字符,并且确定除了普通空格字符之外没有任何其他空格字符,请使用第一种方法。

用户回答回答于

NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                          range:NSMakeRange(0, [myStringlength])];
 //myNewString will be @"thisisatest"
- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];

}

这里还有一个单元测试方法:

- (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);
    }
}

扫码关注云+社区