-7

我试图找出 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);

查找器.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

谢谢!

4

2 回答 2

1

您正在定义一个方法-[Finder findLetterLocation::]。如果它是第一个或第二个字母,则您希望此方法返回第二个参数(“字母”)的第一个参数(“单词”)中的 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

wherepfx替换为您项目的前缀。


此方法的返回类型不应为int. 相反,它应该是NSUIntegeror NSInteger,可能NSUInteger因为结果总是0, 1or 2

- (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
于 2012-12-29T07:39:47.503 回答
0

NSRange 使用位置作为索引 0。你得到的字符是字符 2 和字符 3。

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

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

希望有帮助

你可以用

NSLog(@"First Character = %@", firstCharacter);
于 2012-12-29T07:35:45.880 回答