从NSString中删除所有空格

136
我一直试图去除一个NSString中的空格,但尝试过的所有方法都不起作用。
我有一个"this is a test"字符串,我想得到"thisisatest"。
我使用了应该能够消除空格的whitespaceCharacterSet。
NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];

但是我一直得到带有空格的相同字符串。有什么建议吗?


2
没有简单的方法,但是这个链接有很好的答案 - https://dev59.com/Y3RA5IYBdhLWcg3w_DAw - Caffeinated
2
@Adel 但是,没有被接受的答案 =) - Almas Adilbek
11个回答

307

stringByReplacingOccurrencesOfString:@" " withString:@""

2) If you need to remove all whitespace from your string (not just spaces, but also tabs and newlines), use:

stringByReplacingOccurrencesOfString:@"\\s" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [myString length])

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

2) 如果您确实需要删除一组字符(即不仅是空格字符,而且还包括类似于空格、制表符、不间断空格等任何空白字符),则可以使用 whitespaceCharacterSet 分割字符串,然后将单词重新连接成一个字符串:

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

注意,最后这个解决方案的优点是可以处理除了空格之外的所有空白字符,但它比stringByReplacingOccurrencesOfString:withString:方法要稍微低效一些。因此,如果你只需要删除空格字符并确信不会有其他普通空格字符之外的任何其他空白字符,请使用第一个方法。


太棒了!非常感谢! - iGatiTech

35

我更倾向于使用这样的正则表达式:

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

你可以在NSString上创建一个类别,使生活变得更加轻松:
- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];

以下是关于IT技术的单元测试方法:

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

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

2
哦,我喜欢这个包含单元测试的业务。现在我不仅可以从SO复制粘贴我的代码,还可以复制粘贴该代码的测试! - TylerJames

13

使用stringByReplacingOccurrencesOfString方法很容易完成这个任务。

NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];

1
同意,但前提是您不需要空格集。我本来想使用它,但后来发现我的字符串中有换行符。 - mobibob

7
如果你遇到了空格的问题,可以尝试以下方法。在提取设备联系电话号码时,可能会出现这种问题。需要修改phoneNumber字符串,以便其中没有空格。

NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

yourString是当前的电话号码时。


这真的帮了很多!我也卡在那里了!非常感谢你,伙计!:D - Rafi
对于Swift 3,您可以使用yourString.replacingOccurrences(of: "\u{00a0}", with: "") - Okhan Okbay

4

对我来说,SWIFT 是最好的途径。

        let myString = "  ciao   \n              ciao     "
        var finalString = myString as NSString

        for character in myString{
        if character == " "{

            finalString = finalString.stringByReplacingOccurrencesOfString(" ", withString: "")

        }else{
            finalString = finalString.stringByReplacingOccurrencesOfString("\n", withString: "")

        }

    }
     println(finalString)

结果是:ciaociao

但诀窍在于这个!

 extension String {

    var NoWhiteSpace : String {

    var miaStringa = self as NSString

    if miaStringa.containsString(" "){

      miaStringa =  miaStringa.stringByReplacingOccurrencesOfString(" ", withString: "")
    }
        return miaStringa as String

    }
}

let myString = "Ciao   Ciao       Ciao".NoWhiteSpace  //CiaoCiaoCiao

4
- (NSString *)removeWhitespaces {
  return [[self componentsSeparatedByCharactersInSet:
                    [NSCharacterSet whitespaceCharacterSet]]
      componentsJoinedByString:@""];
}

虽然这段代码可能解决问题,但是简要解释几句会让这个答案对未来的读者更有价值。 - Thom

4

stringByReplacingOccurrencesOfString将替换字符串中的所有空格,而不仅仅是开头和结尾。

使用:

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
你说要使用 stringByReplacingOccurrencesOfString,但给了一个关于 stringByTrimmingCharactersInSet 的例子? - Flexicoder

3
这是用来移除从文本字段获取文本时出现的空格的方法,但如果您想要删除字符串之间的空格,您可以使用。
xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];

它将空格替换为空格,并通过以下方法处理空字段:
searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

1
使用以下宏并删除空格。
#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

在其他文件中调用 TRIM:
    NSString *strEmail;
    strEmail = TRIM(@"     this is the test.");

也许它会对你有所帮助...


-1
pStrTemp = [pStrTemp stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

请详细说明这段代码片段的作用并修正其格式。 - Yurii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接