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

回答:


303

stringByTrimmingCharactersInSet 文字列の最初と最後の文字のみを削除し、中央の文字は削除しません。

1)文字列から特定の文字(たとえば、スペース文字)のみを削除する必要がある場合は、次を使用します。

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

2)本当に文字のセット(つまり、スペース文字だけでなく、スペース、タブ、壊れないスペースなどの空白文字を削除する必要がある場合は、を使用して文字列を分割whitespaceCharacterSetし、単語をもう一度1つの文字列に結合できます。 :

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

この最後のソリューションには、スペースだけでなくすべての空白文字を処理できるという利点がありますが、に比べて少し効率が悪いことに注意してくださいstringByReplacingOccurrencesOfString:withString:。したがって、本当にスペース文字のみを削除する必要があり、プレーンスペース文字以外の空白文字がないことが確かな場合は、最初の方法を使用します。


見事!どうもありがとう!
iGatiTech 2016

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、2017年

13

使いやすいタスク stringByReplacingOccurrencesOfString

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

1
ただし、空白のセットが必要ない場合にのみ同意します。私はそれを使用するつもりでしたが、その後、文字列に改行があることに気付きました。
mobibob 2012

7

これは\u00a0 (空白)の代わりに経験し ている場合に役立ちます。デバイスの連絡先電話番号を抽出しようとしたときに、この問題が発生しました。空白がないように、phoneNumber文字列を変更する必要がありました。

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

yourString現在の電話番号はいつでしたか。


これはトンを助けました!私もそれにこだわっていました!本当にありがとう!:D
Rafi 2015

yourString.replacingOccurrences(of: "\u{00a0}", with: "")
Swift

4

stringByReplacingOccurrencesOfStringは、文字列内のすべての空白を、開始と終了だけでなく、

使用する

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
あなたは使用するように言いますstringByReplacingOccurrencesOfStringが、例を挙げstringByTrimmingCharactersInSetますか?
Flexicoder 2014年

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

このコードは問題を解決する可能性がありますが、いくつかの説明がこの回答を将来の読者にとって価値あるものにするのに大いに役立ちます。
Thom

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

以下のマルコを使用して、スペースを削除します。

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

このスニペットの機能を少し詳しく説明し、フォーマットを修正してください。
Yurii

-2

これをプロジェクトのどこかに置くことを強くお勧めします:

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

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

1
これは質問に対する答えではありません。
Ben Lachman、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.