我试图找出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
谢谢!
答案 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
。相反,它应该是NSUInteger
或NSInteger
,可能是NSUInteger
,因为结果将始终为0
,1
或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
答案 1 :(得分:0)
NSRange使用location作为索引0.您获得的字符是字符2和字符3.
另外。我相信如果您使用相同的对象,NSString将只与==匹配。
要匹配字符串,请使用 - [NSString isEqualToString:]
希望有所帮助
您可以使用
进行测试NSLog(@"First Character = %@", firstCharacter);