Я написал код для замены delete подстроки в NSString ... моя логика заключалась в том, чтобы использовать «rangeofString», чтобы найти положение каждого символа подстроки, а затем использовать «ReplaceOccurance» для замените символы подстроки пробелом, а затем перечеркните символ пробела. Но я получаю сообщение об ошибке в строке replaceOccurance какNSRangeException даже правильный диапазон в NSString Замените
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceOccurrencesOfString:withString:options:range:]: Range or index out of bounds'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff85614b06 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff83c4e3f0 objc_exception_throw + 43
2 CoreFoundation 0x00007fff856148dc +[NSException raise:format:] + 204
3 CoreFoundation 0x00007fff85613520 -[__NSCFString replaceOccurrencesOfString:withString:options:range:] + 224
4 Foundation 0x00007fff8d433a12 -[NSString stringByReplacingOccurrencesOfString:withString:options:range:] + 170
5 tester 0x00000001000019a1 deleteWithSubstring + 865
6 tester 0x0000000100001d35 main + 133
7 libdyld.dylib 0x00007fff89e267e1 start + 0
8 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminate called throwing an exception....
Вот мой код.
NSString* deleteWithSubstring(NSString *s1,NSString *sub)
{
long int length=[sub length],range=0;
NSRange r;
for(int i=0;i<length;i++)
{
range=[s1 rangeOfString:[NSString stringWithFormat:@"%c",[sub characterAtIndex:i]]options:NSCaseInsensitiveSearch range:NSMakeRange(range,[s1 length]-1)].location;
r=NSMakeRange(range,[s1 length]-1);
NSLog(@"%ld %ld",r.location,r.length);
if(range!=NSNotFound)
{
s1=[s1 stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%c",[sub characterAtIndex:i]] withString:@" " options:NSCaseInsensitiveSearch range:r];
}
}
s1=[s1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return s1;
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *str1,*str2;
[email protected]"Hdida";
[email protected]"fHsdai";
NSLog(@"Loc B:%@ ",,deleteWithSubstring(str2,@"ha"));
}
return 0;
}
На самом деле я решил проблему с range..as переписывания кода сочтя seocond аргумент не UpperBound, а это длина ..which должно быть следующим
NSString* deleteWithSubstring(NSString *s1,NSString *sub)
{
long int length=[sub length],range=0,ndeleted=0;
NSMutableString *s2=[[NSMutableString alloc]initWithString:s1];
NSRange r;
for(int i=0;i<length;i++)
{
range=[s1 rangeOfString:[NSString stringWithFormat:@"%c",[sub characterAtIndex:i]]options:NSCaseInsensitiveSearch range:NSMakeRange(range,[s1 length]-range)].location;
r=NSMakeRange((range-ndeleted),1);
NSLog(@"%ld %ld" ,r.location,r.length);
if(range!=NSNotFound)
{
[s2 deleteCharactersInRange:r];
ndeleted++;
}
}
NSLog(@"%@",s2);
return s2;
}
я уже нашел решение ..explained выше спасибо за вашу помощь :-) – Raon
с текущего кода, что вы хотите сделать? просто для устранения проблемы сбоя? Или также удалить подстроку из str1? – shuvo
Если я передаю fHsdaihati как str1, я получил «fsdihati» из метода deleteWithSubstring. Это ваш желаемый результат? Потому что на нем есть «ha» подстрока (fsdihati) – shuvo