NSString
の空白を削除しようとしましたが、試した方法はどれも動作しませんでした。
"this is a test"
があり、"thisisatest"
を取得したい。
whitespaceCharacterSet
を使用しました。これは空白を削除することになっています。
NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
しかし、スペースを含む同じ文字列を取得し続けました。何か案は?
stringByTrimmingCharactersInSet
は、文字列の先頭と末尾の文字のみを削除し、中央の文字は削除しません。
1)文字列から特定の文字(スペース文字など)のみを削除する必要がある場合は、次を使用します。
[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]
2)文字セット(つまり、スペース文字だけでなく、スペース、タブ、壊れないスペースなどの空白文字)を本当に削除する必要がある場合は、whitespaceCharacterSet
を使用して文字列を分割できます。次に、1つの文字列で単語を再び結合します。
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のカテゴリにして、生活をさらに楽にすることができます:
- (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);
}
}
stringByReplacingOccurrencesOfString
を使用した簡単なタスク
NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
これは、(ホワイトスペース)の代わりに\u00a0
が発生している場合に役立ちます。デバイスの連絡先電話番号を抽出しようとしたときに、この問題が発生しました。 phoneNumber文字列を変更して、空白が含まれないようにする必要がありました。
NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
yourString
が現在の電話番号だったとき。
以下のマルコを使用して、スペースを削除します。
#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
他のファイルでTRIMを呼び出します。
NSString *strEmail;
strEmail = TRIM(@" this is the test.");
それがあなたを助けますように...
- (NSString *)removeWhitespaces {
return [[self componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]]
componentsJoinedByString:@""];
}
stringByReplacingOccurrencesOfStringは、開始と終了だけでなく、文字列内のすべての空白を置き換えます
つかいます
[YourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]
これは私にとって最良の方法です
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
これは、任意のテキストフィールドからテキストを取得するときのスペースを削除するためですが、文字列間のスペースを削除する場合は使用できます
xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];
空のスペースはスペースなしで置き換えられ、空のフィールドは以下の方法で処理されます。
searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];