从NSString删除所有空格


134

我一直在尝试摆脱中的空白NSString,但是我尝试过的任何方法都没有用。

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

我使用过whitespaceCharacterSet,它应该消除空白。

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

但我一直用空格得到相同的字符串。有任何想法吗?


2
没有一个简单的方法,但这种联系具有很大的答案- stackoverflow.com/questions/758212/...
咖啡

2
@Adel但是,没有可接受的答案=)
Almas Adilbek 2012年

Answers:


303

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

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

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

2)如果您确实需要删除一组字符(即不仅是空格字符,而且还删除了任何空白字符,例如空格,制表符,不可破坏的空格等),则可以使用来分割字符串,whitespaceCharacterSet然后将单词再次连接到一个字符串中:

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

请注意,这最后一个解决方案的优点是可以处理每个空格字符,不仅可以处理空格,而且还比处理效率低一些stringByReplacingOccurrencesOfString:withString:。因此,如果您真的只需要删除空格字符,并且确保除了普通空格字符之外没有其他空格字符,请使用第一种方法。


高超!非常感谢!
iGatiTech '16

33

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

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])];

}

这也是它的单元测试方法:

- (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 2012年

7

如果您遇到\u00a0的不是 (空格),这可能会对您有所帮助。当我尝试提取设备联系电话号码时遇到了这个问题。我需要修改phoneNumber字符串,以便其中没有空格。

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

yourString是当前电话号码。


这帮助了很多!我也被困在那!非常感谢男人!:D
拉菲

对于快速3,您可以使用yourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay,

4

stringByReplacingOccurrencesOfString将用字符串中的所有空格代替开始和结束的所有空格

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
你说用stringByReplacingOccurrencesOfString但举一个例子stringByTrimmingCharactersInSet
Flexicoder 2014年

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

尽管此代码可以解决问题,但只需几个解释即可使此答案对将来的读者有价值。
2015年

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

在marco下面使用并删除空间。

#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

在其他文件中调用TRIM:

    NSString *strEmail;
    strEmail = TRIM(@"     this is the test.");

愿它可以帮助您...


3

那是为了删除从任何文本字段获取文本时的任何空格,但是如果要删除字符串之间的空格,则可以使用

xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];

它将用无空间替换空白空间,并且通过以下方法来处理空白字段:

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

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

请详细说明此代码段的功能并修复其格式。
2014年

-2

我强烈建议将其放置在您的项目中的某个位置:

extension String {
    func trim() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }

    func trim(withSet: NSCharacterSet) -> String {
        return self.stringByTrimmingCharactersInSet(withSet)
    }
}

1
这不是问题的答案。
本·拉赫曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.