私のアプリには、ある時点で2つのNSString
sが同じことをして何かを行う必要があるメカニズムがあります。なんらかの理由で2つを比較すると、たとえ同じであっても、まだ認識されません。コードは次のようなものです:
_NSString * aString = [self someMethodThatGetsAString];
NSString * bString;
BOOL areStringsTheSame = NO;
while (areStringsTheSame != YES) {
bString = [self someMethodThatTakesNSStringsFromAnArrey];
if (bString == aString) {
areStringsTheSame = YES;
{ }
_
私はNSLog()
を挿入し、特定の時点でそれらが同じであることを確認しました(そして、私が知る限り、これは_==
_が表すものです...)。 t if
に入り、BOOL
の値を変更します。
この比較を行う別の方法はありますか?何か不足していますか?
メソッド isEqualToString: を使用できます。
if ([bString isEqualToString:aString])
==
は、文字列の値ではなく、文字列の参照(アドレス)を比較します。
このアプローチは私にとってうまくいきました:
if ([firstString compare:secondString] == NSOrderedSame) {
//Do something when they are the same
} else {
//Do something when they are different
}
最近、NSLogで互いに似ている2つのNSStringが異なる場合があるという事実にショックを受けました。これは、NSStringにゼロ幅の空白文字が含まれる場合があるためです。それを認識し、考慮してください:
#define ZERO_WIDTH_SPACE_STRING @"\u200B"
これを克服するには、比較する前に、幅がゼロの空白文字から文字列を削除する必要があります。
NSMutableString *eMailToAdd = [NSMutableString string];
NSMutableCharacterSet *charSet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy];
//[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
NSString *rawStr = [[tokenField textField] text];
for (int i = 0; i < [rawStr length]; i++)
{
if (![charSet characterIsMember:[rawStr characterAtIndex:i]])
{
[eMailToAdd appendFormat:@"%@",[NSString stringWithFormat:@"%c", [rawStr characterAtIndex:i]]];
}
}