Ios 查找NSString中字符(#)的最后一个索引(位置)
想要获取最后一次出现的#但以下代码对其他字符运行良好,但对特殊性却无法给出完美结果的索引“#” 代码在viewDidLoad中正常工作,但在textfield中不工作,应更改CharactersInRange 代码:Ios 查找NSString中字符(#)的最后一个索引(位置),ios,objective-c,iphone,string,nsstring,Ios,Objective C,Iphone,String,Nsstring,想要获取最后一次出现的#但以下代码对其他字符运行良好,但对特殊性却无法给出完美结果的索引“#” 代码在viewDidLoad中正常工作,但在textfield中不工作,应更改CharactersInRange 代码: txtTest.text = @"@ashish @test #vijay $4030 @post"; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
txtTest.text = @"@ashish @test #vijay $4030 @post";
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSRange range = [textField.text rangeOfString:@"a" options:NSBackwardsSearch];
NSLog(@"a :: %d ",range.location);
range = [str rangeOfString:@"@" options:NSBackwardsSearch];
NSLog(@"@ :: %d ",range.location);
range = [str rangeOfString:@"#" options:NSBackwardsSearch];
NSLog(@"# :: %d",range.location);
range = [str rangeOfString:@"$" options:NSBackwardsSearch];
NSLog(@"$ :: %d\n",range.location);
}
结果:
a:17@:26#:2147483647美元:20
尝试使用%lu个无符号长字符,而不是%d个。工作正常
NSString *str = @"ashish @test #vijay $4030 @post";
NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch];
NSLog(@"a :: %lu ",(unsigned long)range.location);
range = [str rangeOfString:@"@" options:NSBackwardsSearch];
NSLog(@"@ :: %lu ",(unsigned long)range.location);
range = [str rangeOfString:@"#" options:NSBackwardsSearch];
NSLog(@"# :: %lu",(unsigned long)range.location);
range = [str rangeOfString:@"$" options:NSBackwardsSearch];
NSLog(@"$ :: %lu\n",(unsigned long)range.location);
a::17
@::26
#::13
$::20首先,您有一个拼写错误。它是
NSString*str
,而不是NSSting*str
其余的在我的机器上运行良好
NSString *str = @"ashish @test #vijay $4030 @post";
NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch];
NSLog(@"a :: %lu ",range.location);
range = [str rangeOfString:@"@" options:NSBackwardsSearch];
NSLog(@"@ :: %lu ",range.location);
range = [str rangeOfString:@"#" options:NSBackwardsSearch];
NSLog(@"# :: %lu",range.location);
range = [str rangeOfString:@"$" options:NSBackwardsSearch];
NSLog(@"$ :: %lu\n",range.location);
答复:
2016-02-29 15:19:39.554 StackOverflowDemo[9189:1825956] a :: 17
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] @ :: 26
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] # :: 13
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] $ :: 20
你能说得更清楚些吗?那就是
NSNotFound
。可能字符看起来相同,但实际上不同,或者其中有一个零宽度的空格或类似的空格?是的,@“#”
字符串中有一个不可见的字符。使用箭头键将光标移过它,您将看到它。复制并粘贴到Xcode(这可能会自动格式化某些内容,甚至可能是编码内容)。修正了第一行的NSString输入错误,运行良好。a::17@::26#:::13$::20,我发现这个结果更正了NSStringspelling@jamil当我在viewDidLoad中放入相同的代码时,它工作正常,但在ShouldChangeCharacters范围内它不工作。。将“str”替换为string感谢您的响应,并且在视图中加载它的工作正常,但在shouldchangeCharacters范围内它不工作shouldchangeCharacters范围内工作正常。奇怪,但在我的机器中它不工作:(我还附上了截图,它向我展示了这个随机的大整数,以防字符不作为文本“ash”出现在文本字段中。)显示a::0@::9223372036854775807#:::9223372036854775807$:9223372036854775807的日志。因此,请仔细检查您的委托和字段。请尝试更改范围对象的名称,因为相同名称的NSRange对象来自shouldChangeCharactersInRange方法。在视图中加载其工作正常,但在shouldChangeCharactersInRang中e它不起作用:(您是否检查(并重新输入)注释中提到的字符串?您确实有一些“非标准”字符,不同的位置也清楚地表明了这一点。