2 u013133977 u013133977 于 2015.07.21 14:23 提问

OC-NSString中,写了一个在母串中查找子串的位置,但是检索的信息有遗漏,请问是哪儿出现了问题?
    NSString * motherstr = @"w is w is w";
    NSString * sonstr = @"w";
    NSRange range = [motherstr rangeOfString:sonstr];
    while(range.location != NSNotFound)
    {
        NSLog(@"start = %@",NSStringFromRange(range));
        NSRange temp = NSMakeRange((range.location + range.length), (motherstr.length-(range.location+range.length)));
        range =[motherstr rangeOfString:sonstr options:NSBackwardsSearch range:temp];
    }

查找的时候只找到了开头和结尾中的w,中间的包含的子串字符并没有找到,想了很久也没想出来为什么,求大神告知。

5个回答

u013133977
u013133977   2015.07.21 19:32
已采纳

NSString * motherstr = @"a is a , so a not equal b";
NSString * sonstr = @"a";
NSRange range = [motherstr rangeOfString:sonstr options:NSBackwardsSearch range:NSMakeRange(0, motherstr.length)];
//循环检索
while(range.location != NSNotFound)
{
NSLog(@"start = %@",NSStringFromRange(range));
NSUInteger start = 0;
NSUInteger end = range.location;
NSRange temp = NSMakeRange(start,end);
range =[motherstr rangeOfString:sonstr options:NSBackwardsSearch range:temp];
}
总算解决了,写的不咋滴,希望大家赐教...

u013133977
u013133977 回复shiter: 如果从后面开始检索,那么一开始就应该设置反向检索,普通的写法,先从前面检索(汗,很久都没发现),如果先从前面检索,那么进入循环以后,直接从后面检索,如果后面出现了关键字,我的写法就会退出。现在更正了。
2 年多之前 回复
wangyaninglm
wangyaninglm 那你之前的问题是出在那里了?不得不吐槽下oc 这个语言的混乱。。。
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.21 14:28

应该是你的range定义的不对

u013133977
u013133977 range由temp来提供,后面我调试的时候,观察了temp的范围,那个检索范围并没有问题。不知道为什么。
2 年多之前 回复
u013133977
u013133977   2015.07.21 14:37

range由temp来提供,后面我调试的时候,观察了temp的范围,那个检索范围并没有问题。不知道为什么。

wangyaninglm
wangyaninglm   Ds   Rxr 2015.07.21 16:06

NSString *string1 = @"This is a string";
NSString *string2 = @"string";
NSRange range = [string1 rangeOfString:string2];
int location = range.location;
int leight = range.length;
NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"Location:%i,Leight:%i",location,leight]];
NSLog(@"astring:%@",astring);
[astring release];

u013133977
u013133977 那当你的string1 =“this is a string string is a string“,你的第二个和第三个string怎么检索?
2 年多之前 回复
wangyaninglm
wangyaninglm   Ds   Rxr 2015.07.21 17:08

//字符串查找

void Find(){

    NSString *str=@"123ABC123Acbc";

    NSLog(@"%i",[str hasPrefix:@"1123"]);//是否匹配指定的字符串开头

    NSLog(@"%i",[str hasSuffix:@"cbc1"]);//是否匹配指定的字符串结尾



    NSRange range=[str rangeOfString:@"123"];//指定的字符串从左往右匹配(系统默认)。

    NSLog(@"%@",NSStringFromRange(range));

    //指定的字符串从右往左匹配

    NSRange range1=[str rangeOfString:@"123" options:NSBackwardsSearch];

    NSLog(@"%@",NSStringFromRange(range1));



}



int main(int argc, const char * argv[])

{

    @autoreleasepool {

        Find();



    }

    return 0;

}

你后面的那个range是从后往前搜索么?
我object c 也不是很熟

u013133977
u013133977 我解决了。
2 年多之前 回复
u013133977
u013133977 是从后面开始检索的。一直没想到,为什么中间那部分会检索不了。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片