web-dev-qa-db-ja.com

NSStringからすべての空白を削除します

NSStringの空白を削除しようとしましたが、試した方法はどれも動作しませんでした。

"this is a test"があり、"thisisatest"を取得したい。

whitespaceCharacterSetを使用しました。これは空白を削除することになっています。

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

しかし、スペースを含む同じ文字列を取得し続けました。何か案は?

131
marsalal1014

stringByTrimmingCharactersInSetは、文字列の先頭と末尾の文字のみを削除し、中央の文字は削除しません。

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

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

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

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

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

298
AliSoftware

このような正規表現を使用することを好みます

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);
    }
}
31
n8tr

stringByReplacingOccurrencesOfStringを使用した簡単なタスク

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

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

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

yourStringが現在の電話番号だったとき。

5
dvp.petrov

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

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

他のファイルでTRIMを呼び出します。

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

それがあなたを助けますように...

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

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

つかいます

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]
2
Siva Murugan

これは私にとって最良の方法です

        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
2
RobertoL

これは、任意のテキストフィールドからテキストを取得するときのスペースを削除するためですが、文字列間のスペースを削除する場合は使用できます

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

空のスペースはスペースなしで置き換えられ、空のフィールドは以下の方法で処理されます。

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
1
anand madhav