Objective c == strings和isEqualToString方法找不到匹配项

时间:2012-12-29 07:27:10

标签: objective-c

我试图找出1个字母的字符串是否出现在不同字符串的前2个字母中。我试图将字符串与==以及isEqualToString NSString方法进行比较。 有没有人知道为什么我的代码无法找到匹配项。它总是只返回0。 我希望方法返回2,因为字母b在单词(第一个参数)的第二个字母位置,并且应该与字母(第二个参数)匹配

主要方法:

    Finder *f = [[Finder alloc]init];

    int position = [f findLetterLocation : @"abc" : @"b"];
    NSLog(@"using == %d", position);

    int position2 = [f findLetterLocation2 : @"abc" : @"b"];
    NSLog(@"using isEqualToString %d", position);

Finder.m

-(int)findLetterLocation: (NSString*)word : (NSString*)letter{
NSRange MyOneRange = {1, 1};
NSRange MyTwoRange = {2, 1};

NSString *firstCharacter = [[NSString alloc] init];
NSString *secondCharacter = [[NSString alloc] init];

firstCharacter = [word substringWithRange:MyOneRange];
secondCharacter = [word substringWithRange:MyTwoRange];

if(firstCharacter == letter){
    return 1;
}
if(firstCharacter == letter){
    return 2;
}
return 0;
}

findLetterLocation2与上面的方法完全相同,但只用以下方法替换if语句:

if([firstCharacter isEqualToString: letter]){
    return 1;
}
if([firstCharacter isEqualToString:  letter]){
    return 2;
}

输出

2012-12-29 18:14:51.253 test[83101:303] using == 0
2012-12-29 18:14:51.255 test[83101:303] using isEqualToString 0

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在定义方法-[Finder findLetterLocation::]。您希望此方法在第二个参数(“letter”)的第一个参数(“word”)中返回1索引位置(如果它是第一个或第二个字母,否则返回0)。这个实现可以解决这个问题:

-(int)findLetterLocation: (NSString*)word : (NSString*)letter
{
    int res = 0;
    if (word && 
        letter &&
        [letter length] == 1) {
        NSRange range = [word rangeOfString:letter];
        if (range.location < 2) {
            res = range.location + 1;
        }
    }
    return res;
}

此方法名称是非常规的。一个更好的方法名称是

- (int)locationInString:(NSString *)string ofLetter:(NSString *)letter

更好的方法名称是

- (int)pfx_oneIndexedLocationInFirstTwoCharactersOfString:(NSString *)string ofCharacter:(NSString *)letter

其中pfx替换为项目的前缀。


此方法的返回类型不应为int。相反,它应该是NSUIntegerNSInteger,可能是NSUInteger,因为结果将始终为012

- (NSUInteger)pfx_oneIndexedLocationInFirstTwoCharactersOfString:(NSString *)string ofCharacter:(NSString *)letter

此方法可能属于NSString的类别,而不是独立的类Finder

@interface NSString (Locating)

- (NSUInteger)pfx_oneIndexedLocationInFirstTwoCharactersOfCharacter:(NSString *)character

@end

@implementation NSString (Locating)

- (NSUInteger)pfx_oneIndexedLocationInFirstTwoCharactersOfCharacter:(NSString *)character
{
    int res = 0;
    if (character &&
        [character length] == 1) {
        NSRange range = [word rangeOfString:letter];
        if (range.location < 2) {
            res = range.location + 1;
        }
    }
    return res;
}

@end

答案 1 :(得分:0)

NSRange使用location作为索引0.您获得的字符是字符2和字符3.

另外。我相信如果您使用相同的对象,NSString将只与==匹配。

要匹配字符串,请使用 - [NSString isEqualToString:]

希望有所帮助

您可以使用

进行测试
NSLog(@"First Character = %@", firstCharacter);