web-dev-qa-db-ja.com

2つのNSStringを比較する

私のアプリには、ある時点で2つのNSStringsが同じことをして何かを行う必要があるメカニズムがあります。なんらかの理由で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の値を変更します。

この比較を行う別の方法はありますか?何か不足していますか?

20
Ohad Regev

メソッド isEqualToString: を使用できます。

if ([bString isEqualToString:aString])

==は、文字列の値ではなく、文字列の参照(アドレス)を比較します。

78
MByD

このアプローチは私にとってうまくいきました:

if ([firstString compare:secondString] == NSOrderedSame) {
    //Do something when they are the same
} else {
    //Do something when they are different
}
5
xSolver

最近、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]]];
        }
    }
4
wzbozon